[metacity] window: add missing window types
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] window: add missing window types
- Date: Tue, 28 Feb 2017 01:55:34 +0000 (UTC)
commit d51846b5f3b69f8c140faed6b113c0b2d1fb5370
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Feb 28 00:54:49 2017 +0200
window: add missing window types
src/core/core.c | 7 +++++
src/core/place.c | 21 +++++++++++++++++
src/core/session.c | 28 +++++++++++++++++++++++
src/core/stack.c | 10 ++++++++
src/core/window-private.h | 9 ++++++-
src/core/window.c | 54 ++++++++++++++++++++++++++++++++++++++++-----
6 files changed, 122 insertions(+), 7 deletions(-)
---
diff --git a/src/core/core.c b/src/core/core.c
index 50a0b09..da8ee0e 100644
--- a/src/core/core.c
+++ b/src/core/core.c
@@ -148,6 +148,13 @@ meta_core_get (Display *xdisplay,
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;
diff --git a/src/core/place.c b/src/core/place.c
index 525e93d..02a5bb4 100644
--- a/src/core/place.c
+++ b/src/core/place.c
@@ -394,6 +394,13 @@ rectangle_overlaps_some_window (MetaRectangle *rect,
case META_WINDOW_DESKTOP:
case META_WINDOW_DIALOG:
case META_WINDOW_MODAL_DIALOG:
+ 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:
break;
case META_WINDOW_NORMAL:
@@ -779,6 +786,13 @@ meta_window_place (MetaWindow *window,
case META_WINDOW_TOOLBAR:
case META_WINDOW_MENU:
case META_WINDOW_UTILITY:
+ 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:
goto done_no_constraints;
default:
@@ -815,6 +829,13 @@ meta_window_place (MetaWindow *window,
case META_WINDOW_TOOLBAR:
case META_WINDOW_MENU:
case META_WINDOW_UTILITY:
+ 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:
if (window->size_hints.flags & PPosition)
{
meta_topic (META_DEBUG_PLACEMENT,
diff --git a/src/core/session.c b/src/core/session.c
index b88302d..9234a25 100644
--- a/src/core/session.c
+++ b/src/core/session.c
@@ -701,6 +701,20 @@ window_type_to_string (MetaWindowType type)
return "splashscreen";
case META_WINDOW_UTILITY:
return "utility";
+ case META_WINDOW_DROPDOWN_MENU:
+ return "dropdown_menu";
+ case META_WINDOW_POPUP_MENU:
+ return "popup_menu";
+ case META_WINDOW_TOOLTIP:
+ return "tooltip";
+ case META_WINDOW_NOTIFICATION:
+ return "notification";
+ case META_WINDOW_COMBO:
+ return "combo";
+ case META_WINDOW_DND:
+ return "dnd";
+ case META_WINDOW_OVERRIDE_OTHER:
+ return "override_redirect";
default:
break;
}
@@ -729,6 +743,20 @@ window_type_from_string (const char *str)
return META_WINDOW_UTILITY;
else if (strcmp (str, "splashscreen") == 0)
return META_WINDOW_SPLASHSCREEN;
+ else if (strcmp (str, "dropdown_menu") == 0)
+ return META_WINDOW_DROPDOWN_MENU;
+ else if (strcmp (str, "popup_menu") == 0)
+ return META_WINDOW_POPUP_MENU;
+ else if (strcmp (str, "tooltip") == 0)
+ return META_WINDOW_TOOLTIP;
+ else if (strcmp (str, "notification") == 0)
+ return META_WINDOW_NOTIFICATION;
+ else if (strcmp (str, "combo") == 0)
+ return META_WINDOW_COMBO;
+ else if (strcmp (str, "dnd") == 0)
+ return META_WINDOW_DND;
+ else if (strcmp (str, "override_redirect") == 0)
+ return META_WINDOW_OVERRIDE_OTHER;
else
return META_WINDOW_NORMAL;
}
diff --git a/src/core/stack.c b/src/core/stack.c
index 9a229e0..31971ad 100644
--- a/src/core/stack.c
+++ b/src/core/stack.c
@@ -286,6 +286,16 @@ get_standalone_layer (MetaWindow *window)
else
layer = META_LAYER_DOCK;
}
+ else if (window->type == META_WINDOW_DROPDOWN_MENU ||
+ window->type == META_WINDOW_POPUP_MENU ||
+ window->type == META_WINDOW_TOOLTIP ||
+ window->type == META_WINDOW_NOTIFICATION ||
+ window->type == META_WINDOW_COMBO ||
+ window->type == META_WINDOW_DND ||
+ window->type == META_WINDOW_OVERRIDE_OTHER)
+ {
+ layer = META_LAYER_OVERRIDE_REDIRECT;
+ }
else
{
meta_window_foreach_transient (window,
diff --git a/src/core/window-private.h b/src/core/window-private.h
index 9567487..da336a3 100644
--- a/src/core/window-private.h
+++ b/src/core/window-private.h
@@ -58,7 +58,14 @@ typedef enum
META_WINDOW_TOOLBAR,
META_WINDOW_MENU,
META_WINDOW_UTILITY,
- META_WINDOW_SPLASHSCREEN
+ META_WINDOW_SPLASHSCREEN,
+ META_WINDOW_DROPDOWN_MENU,
+ META_WINDOW_POPUP_MENU,
+ META_WINDOW_TOOLTIP,
+ META_WINDOW_NOTIFICATION,
+ META_WINDOW_COMBO,
+ META_WINDOW_DND,
+ META_WINDOW_OVERRIDE_OTHER
} MetaWindowType;
typedef enum
diff --git a/src/core/window.c b/src/core/window.c
index a82d1e9..798f4d9 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -2060,6 +2060,13 @@ window_state_on_map (MetaWindow *window,
case META_WINDOW_DESKTOP:
case META_WINDOW_SPLASHSCREEN:
case META_WINDOW_MENU:
+ 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:
/* don't focus any of these; places_on_top may be irrelevant for some of
* these (e.g. dock)--but you never know--the focus window might also be
* of the same type in some weird situation...
@@ -6386,17 +6393,45 @@ recalc_window_type (MetaWindow *window)
window->type = META_WINDOW_TOOLBAR;
else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_MENU)
window->type = META_WINDOW_MENU;
- else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_DIALOG)
- window->type = META_WINDOW_DIALOG;
- else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_NORMAL)
- window->type = META_WINDOW_NORMAL;
else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_UTILITY)
window->type = META_WINDOW_UTILITY;
else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_SPLASH)
window->type = META_WINDOW_SPLASHSCREEN;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_DIALOG)
+ window->type = META_WINDOW_DIALOG;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_NORMAL)
+ window->type = META_WINDOW_NORMAL;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_DROPDOWN_MENU)
+ window->type = META_WINDOW_DROPDOWN_MENU;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_POPUP_MENU)
+ window->type = META_WINDOW_POPUP_MENU;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_TOOLTIP)
+ window->type = META_WINDOW_TOOLTIP;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_NOTIFICATION)
+ window->type = META_WINDOW_NOTIFICATION;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_COMBO)
+ window->type = META_WINDOW_COMBO;
+ else if (window->type_atom == window->display->atom__NET_WM_WINDOW_TYPE_DND)
+ window->type = META_WINDOW_DND;
+ else if (window->override_redirect)
+ window->type = META_WINDOW_OVERRIDE_OTHER;
else
- meta_bug ("Set a type atom for %s that wasn't handled in recalc_window_type\n",
- window->desc);
+ {
+ char *atom_name;
+
+ /* Fallback on a normal type, and print warning. Don't abort. */
+ window->type = META_WINDOW_NORMAL;
+
+ meta_error_trap_push (window->display);
+ atom_name = XGetAtomName (window->display->xdisplay, window->type_atom);
+ meta_error_trap_pop (window->display);
+
+ meta_warning ("Unrecognized type atom [%s] set for %s \n",
+ atom_name ? atom_name : "unknown", window->desc);
+
+ if (atom_name)
+ XFree (atom_name);
+ }
}
else if (window->xtransient_for != None)
{
@@ -6679,6 +6714,13 @@ recalc_window_features (MetaWindow *window)
case META_WINDOW_MENU:
case META_WINDOW_UTILITY:
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:
window->skip_taskbar = TRUE;
window->skip_pager = TRUE;
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]