diff options
author | Tor Lillqvist <tml@novell.com> | 2005-03-15 02:07:08 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2005-03-15 02:07:08 +0000 |
commit | 7c12edeb935bf74a68025896e29b6ee01896d49d (patch) | |
tree | ba631723aaa96dabf2774ac6acc9ab6bcf54d904 /gdk | |
parent | eef20f2c834aa260ba04b5008ba061fd3faae4a4 (diff) | |
download | gtk+-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.c | 10 | ||||
-rw-r--r-- | gdk/win32/gdkmain-win32.c | 20 | ||||
-rw-r--r-- | gdk/win32/gdkprivate-win32.h | 1 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 51 |
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); |