summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorTor Lillqvist <tml@novell.com>2005-03-15 02:07:08 +0000
committerTor Lillqvist <tml@src.gnome.org>2005-03-15 02:07:08 +0000
commit7c12edeb935bf74a68025896e29b6ee01896d49d (patch)
treeba631723aaa96dabf2774ac6acc9ab6bcf54d904 /gdk
parenteef20f2c834aa260ba04b5008ba061fd3faae4a4 (diff)
downloadgtk+-7c12edeb935bf74a68025896e29b6ee01896d49d.tar.gz
New debugging function. As GetKeyNameText() returns a localized key name
2005-03-15 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New debugging function. As GetKeyNameText() returns a localized key name we need to convert it to UTF-8. * gdk/win32/gdkprivate-win32.h: Declare it. * gdk/win32/gdkevents-win32.c: Use it. * gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix handling of children of foreign windows. They should be child windows from Windows's perspective, even if they are toplevel GDK windows.
Diffstat (limited to 'gdk')
-rw-r--r--gdk/win32/gdkevents-win32.c10
-rw-r--r--gdk/win32/gdkmain-win32.c20
-rw-r--r--gdk/win32/gdkprivate-win32.h1
-rw-r--r--gdk/win32/gdkwindow-win32.c51
4 files changed, 54 insertions, 28 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index eb3ea71c71..97af1e6f69 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -2210,7 +2210,7 @@ gdk_event_translate (GdkDisplay *display,
* removed it. Repost the same message to our queue so that
* we will get it later when we are prepared.
*/
- GDK_NOTE (MISC, g_print (" (posted)"));
+ GDK_NOTE (EVENTS, g_print (" (posted)"));
PostMessage (msg->hwnd, msg->message,
msg->wParam, msg->lParam);
@@ -2375,9 +2375,7 @@ gdk_event_translate (GdkDisplay *display,
case WM_SYSKEYDOWN:
GDK_NOTE (EVENTS,
g_print (" %s ch:%.02x %s",
- (GetKeyNameText (msg->lParam, buf,
- sizeof (buf)) > 0 ?
- buf : ""),
+ _gdk_win32_key_to_string (msg->lParam),
msg->wParam,
decode_key_lparam (msg->lParam)));
@@ -2403,9 +2401,7 @@ gdk_event_translate (GdkDisplay *display,
case WM_KEYDOWN:
GDK_NOTE (EVENTS,
g_print (" %s ch:%.02x %s",
- (GetKeyNameText (msg->lParam, buf,
- sizeof (buf)) > 0 ?
- buf : ""),
+ _gdk_win32_key_to_string (msg->lParam),
msg->wParam,
decode_key_lparam (msg->lParam)));
diff --git a/gdk/win32/gdkmain-win32.c b/gdk/win32/gdkmain-win32.c
index 1615494166..0308e94895 100644
--- a/gdk/win32/gdkmain-win32.c
+++ b/gdk/win32/gdkmain-win32.c
@@ -905,6 +905,26 @@ _gdk_win32_message_to_string (UINT msg)
}
gchar *
+_gdk_win32_key_to_string (LONG lParam)
+{
+ char buf[100];
+ gchar *keyname_utf8;
+
+ if (GetKeyNameText (lParam, buf, sizeof (buf)) &&
+ (keyname_utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL)) != NULL)
+ {
+ gchar *retval = static_printf ("%s", keyname_utf8);
+
+ g_free (keyname_utf8);
+
+ return retval;
+ }
+
+ return static_printf ("unk-%#lx", lParam);
+}
+
+
+gchar *
_gdk_win32_rect_to_string (const RECT *rect)
{
return static_printf ("%ldx%ld@+%ld+%ld",
diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
index 221e3429ae..44cd29226f 100644
--- a/gdk/win32/gdkprivate-win32.h
+++ b/gdk/win32/gdkprivate-win32.h
@@ -403,6 +403,7 @@ gchar *_gdk_win32_psstyle_to_string (DWORD pen_style);
gchar *_gdk_win32_psendcap_to_string (DWORD pen_style);
gchar *_gdk_win32_psjoin_to_string (DWORD pen_style);
gchar *_gdk_win32_message_to_string (UINT msg);
+gchar *_gdk_win32_key_to_string (LONG lParam);
gchar *_gdk_win32_rect_to_string (const RECT *rect);
gchar *_gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect);
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index b68f93519a..262aeb606f 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -341,7 +341,7 @@ _gdk_windowing_window_init (void)
_gdk_window_init_position (GDK_WINDOW (private));
- gdk_win32_handle_table_insert (&_gdk_root_window, _gdk_parent_root);
+ gdk_win32_handle_table_insert ((HANDLE *) &_gdk_root_window, _gdk_parent_root);
GDK_NOTE (MISC, g_print ("_gdk_parent_root=%p\n", GDK_WINDOW_HWND (_gdk_parent_root)));
}
@@ -488,6 +488,7 @@ gdk_window_new_internal (GdkWindow *parent,
DWORD dwStyle = 0, dwExStyle;
RECT rect;
GdkWindow *window;
+ GdkWindow *orig_parent;
GdkWindowObject *private;
GdkWindowImplWin32 *impl;
GdkDrawableImplWin32 *draw_impl;
@@ -510,6 +511,8 @@ gdk_window_new_internal (GdkWindow *parent,
g_return_val_if_fail (GDK_IS_WINDOW (parent), NULL);
+ orig_parent = parent;
+
GDK_NOTE (MISC,
g_print ("gdk_window_new: %s\n",
(attributes->window_type == GDK_WINDOW_TOPLEVEL ? "TOPLEVEL" :
@@ -605,30 +608,38 @@ gdk_window_new_internal (GdkWindow *parent,
switch (private->window_type)
{
case GDK_WINDOW_TOPLEVEL:
- dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
- hparent = _gdk_root_window;
- offset_x = _gdk_offset_x;
- offset_y = _gdk_offset_y;
+ case GDK_WINDOW_DIALOG:
+ if (GDK_WINDOW_TYPE (parent) != GDK_WINDOW_ROOT)
+ {
+ g_warning (G_STRLOC ": Toplevel windows must be created as children\n"
+ "of a window of type GDK_WINDOW_ROOT or GDK_WINDOW_FOREIGN");
+ hparent = _gdk_root_window;
+ }
+ /* Children of foreign windows aren't toplevel windows */
+ if (GDK_WINDOW_TYPE (orig_parent) == GDK_WINDOW_FOREIGN)
+ {
+ dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN;
+ }
+ else
+ {
+ if (private->window_type == GDK_WINDOW_TOPLEVEL)
+ dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
+ else
+ dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
+
+ offset_x = _gdk_offset_x;
+ offset_y = _gdk_offset_y;
+ }
break;
case GDK_WINDOW_CHILD:
dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
break;
- case GDK_WINDOW_DIALOG:
- dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
-#if 0
- dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */
-#endif
- hparent = _gdk_root_window;
- offset_x = _gdk_offset_x;
- offset_y = _gdk_offset_y;
- break;
-
case GDK_WINDOW_TEMP:
- dwStyle = WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
- /* a temp window is not necessarily a top level window */
- dwStyle |= (_gdk_parent_root == parent ? WS_POPUP : WS_CHILDWINDOW);
+ /* A temp window is not necessarily a top level window */
+ dwStyle = (_gdk_parent_root == parent ? WS_POPUP : WS_CHILDWINDOW);
+ dwStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
dwExStyle |= WS_EX_TOOLWINDOW;
offset_x = _gdk_offset_x;
offset_y = _gdk_offset_y;
@@ -666,7 +677,7 @@ gdk_window_new_internal (GdkWindow *parent,
else
title = get_default_title ();
if (!title || !*title)
- title = "GDK client window";
+ title = "";
private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
@@ -2833,8 +2844,6 @@ gboolean
gdk_window_set_static_gravities (GdkWindow *window,
gboolean use_static)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
-
g_return_val_if_fail (window != NULL, FALSE);
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);