[mutter/configurable-shadows: 5/13] Add meta_window_get_frame_type()
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/configurable-shadows: 5/13] Add meta_window_get_frame_type()
- Date: Sat, 13 Nov 2010 16:51:53 +0000 (UTC)
commit cc9efe1289e0e851e40993415f90907a4b2d8d67
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Thu Nov 11 16:12:11 2010 -0500
Add meta_window_get_frame_type()
Add a public function to get the frame type for a window; the
code is refactored from existing code in core.c.
https://bugzilla.gnome.org/show_bug.cgi?id=592382
src/core/core.c | 65 +--------------------------------------------
src/core/window.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++
src/include/window.h | 3 ++
3 files changed, 76 insertions(+), 63 deletions(-)
---
diff --git a/src/core/core.c b/src/core/core.c
index d827ae6..7fee2fc 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -117,69 +117,8 @@ meta_core_get (Display *xdisplay,
*((MetaFrameFlags*)answer) = meta_frame_get_flags (window->frame);
break;
case META_CORE_GET_FRAME_TYPE:
- {
- MetaFrameType base_type = META_FRAME_TYPE_LAST;
-
- switch (window->type)
- {
- case META_WINDOW_NORMAL:
- base_type = META_FRAME_TYPE_NORMAL;
- break;
-
- case META_WINDOW_DIALOG:
- base_type = META_FRAME_TYPE_DIALOG;
- break;
-
- case META_WINDOW_MODAL_DIALOG:
- if (meta_prefs_get_attach_modal_dialogs () &&
- meta_window_get_transient_for (window) != NULL)
- base_type = META_FRAME_TYPE_ATTACHED;
- else
- base_type = META_FRAME_TYPE_MODAL_DIALOG;
- break;
-
- case META_WINDOW_MENU:
- base_type = META_FRAME_TYPE_MENU;
- break;
-
- case META_WINDOW_UTILITY:
- base_type = META_FRAME_TYPE_UTILITY;
- break;
-
- case META_WINDOW_DESKTOP:
- case META_WINDOW_DOCK:
- case META_WINDOW_TOOLBAR:
- case META_WINDOW_SPLASHSCREEN:
- case META_WINDOW_DROPDOWN_MENU:
- case META_WINDOW_POPUP_MENU:
- case META_WINDOW_TOOLTIP:
- case META_WINDOW_NOTIFICATION:
- case META_WINDOW_COMBO:
- case META_WINDOW_DND:
- case META_WINDOW_OVERRIDE_OTHER:
- /* No frame */
- base_type = META_FRAME_TYPE_LAST;
- break;
-
- }
-
- if (base_type == META_FRAME_TYPE_LAST)
- {
- /* can't add border if undecorated */
- *((MetaFrameType*)answer) = META_FRAME_TYPE_LAST;
- }
- else if (window->border_only && base_type != META_FRAME_TYPE_ATTACHED)
- {
- /* override base frame type */
- *((MetaFrameType*)answer) = META_FRAME_TYPE_BORDER;
- }
- else
- {
- *((MetaFrameType*)answer) = base_type;
- }
-
- break;
- }
+ *((MetaFrameType*)answer) = meta_window_get_frame_type (window);
+ break;
case META_CORE_GET_MINI_ICON:
*((GdkPixbuf**)answer) = window->mini_icon;
break;
diff --git a/src/core/window.c b/src/core/window.c
index 30bdeda..226f048 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -9668,3 +9668,74 @@ meta_window_get_mutter_hints (MetaWindow *window)
return window->mutter_hints;
}
+
+/**
+ * meta_window_get_frame_type:
+ * @window: a #MetaWindow
+ *
+ * Gets the type of window decorations that should be used for this window.
+ *
+ * Return value: the frame type
+ */
+MetaFrameType
+meta_window_get_frame_type (MetaWindow *window)
+{
+ MetaFrameType base_type = META_FRAME_TYPE_LAST;
+
+ switch (window->type)
+ {
+ case META_WINDOW_NORMAL:
+ base_type = META_FRAME_TYPE_NORMAL;
+ break;
+
+ case META_WINDOW_DIALOG:
+ base_type = META_FRAME_TYPE_DIALOG;
+ break;
+
+ case META_WINDOW_MODAL_DIALOG:
+ if (meta_prefs_get_attach_modal_dialogs () &&
+ meta_window_get_transient_for (window) != NULL)
+ base_type = META_FRAME_TYPE_ATTACHED;
+ else
+ base_type = META_FRAME_TYPE_MODAL_DIALOG;
+ break;
+
+ case META_WINDOW_MENU:
+ base_type = META_FRAME_TYPE_MENU;
+ break;
+
+ case META_WINDOW_UTILITY:
+ base_type = META_FRAME_TYPE_UTILITY;
+ break;
+
+ case META_WINDOW_DESKTOP:
+ case META_WINDOW_DOCK:
+ case META_WINDOW_TOOLBAR:
+ case META_WINDOW_SPLASHSCREEN:
+ case META_WINDOW_DROPDOWN_MENU:
+ case META_WINDOW_POPUP_MENU:
+ case META_WINDOW_TOOLTIP:
+ case META_WINDOW_NOTIFICATION:
+ case META_WINDOW_COMBO:
+ case META_WINDOW_DND:
+ case META_WINDOW_OVERRIDE_OTHER:
+ /* No frame */
+ base_type = META_FRAME_TYPE_LAST;
+ break;
+ }
+
+ if (base_type == META_FRAME_TYPE_LAST)
+ {
+ /* can't add border if undecorated */
+ return META_FRAME_TYPE_LAST;
+ }
+ else if (window->border_only && base_type != META_FRAME_TYPE_ATTACHED)
+ {
+ /* override base frame type */
+ return META_FRAME_TYPE_BORDER;
+ }
+ else
+ {
+ return base_type;
+ }
+}
diff --git a/src/include/window.h b/src/include/window.h
index b3d3c4c..db32ac4 100644
--- a/src/include/window.h
+++ b/src/include/window.h
@@ -144,4 +144,7 @@ const char *meta_window_get_client_machine (MetaWindow *window);
gboolean meta_window_is_remote (MetaWindow *window);
gboolean meta_window_is_modal (MetaWindow *window);
const char *meta_window_get_mutter_hints (MetaWindow *window);
+
+MetaFrameType meta_window_get_frame_type (MetaWindow *window);
+
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]