diff options
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/directfb/gdkwindow-directfb.c | 3 | ||||
-rw-r--r-- | gdk/gdkwindow.h | 18 | ||||
-rw-r--r-- | gdk/linux-fb/gdkwindow-fb.c | 3 | ||||
-rw-r--r-- | gdk/quartz/gdkwindow-quartz.c | 3 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 55 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 3 |
6 files changed, 63 insertions, 22 deletions
diff --git a/gdk/directfb/gdkwindow-directfb.c b/gdk/directfb/gdkwindow-directfb.c index 9c40031642..0c5cdf43e4 100644 --- a/gdk/directfb/gdkwindow-directfb.c +++ b/gdk/directfb/gdkwindow-directfb.c @@ -559,6 +559,9 @@ gdk_directfb_window_new (GdkWindow *parent, gdk_directfb_event_windows_add (window); } + if (attributes_mask & GDK_WA_TYPE_HINT) + gdk_window_set_type_hint (window, attributes->type_hint); + return window; } diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h index be1fc2b1e3..325c4b3d88 100644 --- a/gdk/gdkwindow.h +++ b/gdk/gdkwindow.h @@ -85,14 +85,15 @@ typedef enum */ typedef enum { - GDK_WA_TITLE = 1 << 1, - GDK_WA_X = 1 << 2, - GDK_WA_Y = 1 << 3, - GDK_WA_CURSOR = 1 << 4, - GDK_WA_COLORMAP = 1 << 5, - GDK_WA_VISUAL = 1 << 6, - GDK_WA_WMCLASS = 1 << 7, - GDK_WA_NOREDIR = 1 << 8 + GDK_WA_TITLE = 1 << 1, + GDK_WA_X = 1 << 2, + GDK_WA_Y = 1 << 3, + GDK_WA_CURSOR = 1 << 4, + GDK_WA_COLORMAP = 1 << 5, + GDK_WA_VISUAL = 1 << 6, + GDK_WA_WMCLASS = 1 << 7, + GDK_WA_NOREDIR = 1 << 8, + GDK_WA_TYPE_HINT = 1 << 9 } GdkWindowAttributesType; /* Size restriction enumeration. @@ -213,6 +214,7 @@ struct _GdkWindowAttr gchar *wmclass_name; gchar *wmclass_class; gboolean override_redirect; + GdkWindowTypeHint type_hint; }; struct _GdkGeometry diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c index bd0f5494df..fa0e025722 100644 --- a/gdk/linux-fb/gdkwindow-fb.c +++ b/gdk/linux-fb/gdkwindow-fb.c @@ -268,6 +268,9 @@ gdk_window_new (GdkWindow *parent, if (parent_private) parent_private->children = g_list_prepend (parent_private->children, window); + if (attributes_mask & GDK_WA_TYPE_HINT) + gdk_window_set_type_hint (window, attributes->type_hint); + return window; } diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index 93b2f218e8..6003064180 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -708,6 +708,9 @@ gdk_window_new (GdkWindow *parent, GDK_QUARTZ_RELEASE_POOL; + if (attributes_mask & GDK_WA_TYPE_HINT) + gdk_window_set_type_hint (window, attributes->type_hint); + return window; } diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index 3a52f5824b..9d029619ab 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -311,12 +311,13 @@ get_default_title (void) * get its own class */ static ATOM -RegisterGdkClass (GdkWindowType wtype) +RegisterGdkClass (GdkWindowType wtype, GdkWindowTypeHint wtype_hint) { - static ATOM klassTOPLEVEL = 0; - static ATOM klassDIALOG = 0; - static ATOM klassCHILD = 0; - static ATOM klassTEMP = 0; + static ATOM klassTOPLEVEL = 0; + static ATOM klassDIALOG = 0; + static ATOM klassCHILD = 0; + static ATOM klassTEMP = 0; + static ATOM klassTEMPSHADOW = 0; static HICON hAppIcon = NULL; static HICON hAppIconSm = NULL; static WNDCLASSEXW wcl; @@ -412,14 +413,35 @@ RegisterGdkClass (GdkWindowType wtype) break; case GDK_WINDOW_TEMP: - if (0 == klassTEMP) - { - wcl.lpszClassName = L"gdkWindowTemp"; - wcl.style |= CS_SAVEBITS; - ONCE_PER_CLASS (); - klassTEMP = RegisterClassExW (&wcl); - } - klass = klassTEMP; + if ((wtype_hint == GDK_WINDOW_TYPE_HINT_MENU) || + (wtype_hint == GDK_WINDOW_TYPE_HINT_DROPDOWN_MENU) || + (wtype_hint == GDK_WINDOW_TYPE_HINT_POPUP_MENU) || + (wtype_hint == GDK_WINDOW_TYPE_HINT_TOOLTIP)) + { + if (klassTEMPSHADOW == 0) + { + wcl.lpszClassName = "gdkWindowTempShadow"; + wcl.style |= CS_SAVEBITS; + if (_winver >= 0x0501) /* Windows XP (5.1) or above */ + wcl.style |= 0x00020000; /* CS_DROPSHADOW */ + ONCE_PER_CLASS (); + klassTEMPSHADOW = RegisterClassEx (&wcl); + } + + klass = klassTEMPSHADOW; + } + else + { + if (klassTEMP == 0) + { + wcl.lpszClassName = "gdkWindowTemp"; + wcl.style |= CS_SAVEBITS; + ONCE_PER_CLASS (); + klassTEMP = RegisterClassEx (&wcl); + } + + klass = klassTEMP; + } break; default: @@ -638,10 +660,15 @@ gdk_window_new_internal (GdkWindow *parent, private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask; + if (attributes_mask & GDK_WA_TYPE_HINT) + impl->type_hint = attributes->type_hint; + else + impl->type_hint = GDK_WINDOW_TYPE_HINT_NORMAL; + if (private->parent) private->parent->children = g_list_prepend (private->parent->children, window); - klass = RegisterGdkClass (private->window_type); + klass = RegisterGdkClass (private->window_type, impl->type_hint); wtitle = g_utf8_to_utf16 (title, -1, NULL, NULL, NULL); diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 533387fc6f..fe5a0976f3 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -929,6 +929,9 @@ gdk_window_new (GdkWindow *parent, break; } + if (attributes_mask & GDK_WA_TYPE_HINT) + gdk_window_set_type_hint (window, attributes->type_hint); + return window; } |