summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
Diffstat (limited to 'gdk')
-rw-r--r--gdk/directfb/gdkwindow-directfb.c3
-rw-r--r--gdk/gdkwindow.h18
-rw-r--r--gdk/linux-fb/gdkwindow-fb.c3
-rw-r--r--gdk/quartz/gdkwindow-quartz.c3
-rw-r--r--gdk/win32/gdkwindow-win32.c55
-rw-r--r--gdk/x11/gdkwindow-x11.c3
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;
}