diff options
author | Havoc Pennington <hp@pobox.com> | 2002-03-10 15:48:38 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2002-03-10 15:48:38 +0000 |
commit | 447eba6007aa221ec18a2c76569cf792bfe24009 (patch) | |
tree | 7b86433cbf99976a7b093c0b84e11ac030433b18 | |
parent | 5e8ceda7e79bc0218df0364e34f303d298887b24 (diff) | |
download | metacity-447eba6007aa221ec18a2c76569cf792bfe24009.tar.gz |
we didn't claim to support _NET_ACTIVE_WINDOW so gtk_window_present()
2002-03-10 Havoc Pennington <hp@pobox.com>
* src/screen.c (set_supported_hint): we didn't claim to support
_NET_ACTIVE_WINDOW so gtk_window_present() didn't work. Mumble.
Only worked with tasklist because libwnck didn't check for
WM support.
* src/window.c (meta_window_free): clean off window state
when windows are withdrawn, to avoid sticking dialogs
to their initial desktop.
(meta_window_queue_calc_showing): return if window is withdrawn
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | src/core.c | 4 | ||||
-rw-r--r-- | src/display.c | 3 | ||||
-rwxr-xr-x | src/run-metacity.sh | 2 | ||||
-rw-r--r-- | src/screen.c | 3 | ||||
-rw-r--r-- | src/window.c | 52 |
6 files changed, 69 insertions, 7 deletions
@@ -1,3 +1,15 @@ +2002-03-10 Havoc Pennington <hp@pobox.com> + + * src/screen.c (set_supported_hint): we didn't claim to support + _NET_ACTIVE_WINDOW so gtk_window_present() didn't work. Mumble. + Only worked with tasklist because libwnck didn't check for + WM support. + + * src/window.c (meta_window_free): clean off window state + when windows are withdrawn, to avoid sticking dialogs + to their initial desktop. + (meta_window_queue_calc_showing): return if window is withdrawn + 2002-03-08 Laszlo Peter <laca@ireland.sun.com> * configure.in: fix the X linker flags @@ -526,6 +526,10 @@ meta_core_get_grab_frame (Display *xdisplay) display = meta_display_for_x_display (xdisplay); g_assert (display != NULL); + g_assert (display->grab_op == META_GRAB_OP_NONE || + display->grab_window != NULL); + g_assert (display->grab_op == META_GRAB_OP_NONE || + display->grab_window->display->xdisplay == xdisplay); if (display->grab_op != META_GRAB_OP_NONE && display->grab_window->frame) diff --git a/src/display.c b/src/display.c index c40a8523..0ea81ad7 100644 --- a/src/display.c +++ b/src/display.c @@ -1646,6 +1646,9 @@ meta_spew_event (MetaDisplay *display, break; case ResizeRequest: name = "ResizeRequest"; + extra = g_strdup_printf ("width = %d height = %d", + event->xresizerequest.width, + event->xresizerequest.height); break; case CirculateNotify: name = "CirculateNotify"; diff --git a/src/run-metacity.sh b/src/run-metacity.sh index 1e842e3e..474139c7 100755 --- a/src/run-metacity.sh +++ b/src/run-metacity.sh @@ -75,5 +75,5 @@ if test -z "$ONLY_WM"; then fi if test -z "$ONLY_SETUP"; then - METACITY_DEBUG_BUTTON_GRABS=1 METACITY_DISPLAY=$CLIENT_DISPLAY exec libtool --mode=execute $DEBUG ./metacity $OPTIONS + METACITY_VERBOSE=1 METACITY_DEBUG=1 METACITY_USE_LOGFILE=1 METACITY_DEBUG_BUTTON_GRABS=1 METACITY_DISPLAY=$CLIENT_DISPLAY exec libtool --mode=execute $DEBUG ./metacity $OPTIONS fi diff --git a/src/screen.c b/src/screen.c index f2e7e4d6..0925b724 100644 --- a/src/screen.c +++ b/src/screen.c @@ -78,7 +78,7 @@ set_wm_check_hint (MetaScreen *screen) static int set_supported_hint (MetaScreen *screen) { -#define N_SUPPORTED 28 +#define N_SUPPORTED 29 #define N_WIN_SUPPORTED 1 Atom atoms[N_SUPPORTED]; @@ -110,6 +110,7 @@ set_supported_hint (MetaScreen *screen) atoms[25] = screen->display->atom_net_wm_window_type_splashscreen; atoms[26] = screen->display->atom_net_wm_state_fullscreen; atoms[27] = screen->display->atom_net_wm_ping; + atoms[28] = screen->display->atom_net_active_window; XChangeProperty (screen->display->xdisplay, screen->xroot, screen->display->atom_net_supported, diff --git a/src/window.c b/src/window.c index 979dafc5..27cca9ef 100644 --- a/src/window.c +++ b/src/window.c @@ -134,6 +134,22 @@ static void meta_window_apply_session_info (MetaWindow *window, const MetaWindowSessionInfo *info); +static const char* +wm_state_to_string (int state) +{ + switch (state) + { + case NormalState: + return "NormalState"; + case IconicState: + return "IconicState"; + case WithdrawnState: + return "WithdrawnState"; + } + + return "Unknown"; +} + MetaWindow* meta_window_new (MetaDisplay *display, Window xwindow, gboolean must_be_viewable) @@ -176,7 +192,8 @@ meta_window_new (MetaDisplay *display, Window xwindow, return NULL; } - meta_verbose ("attrs.map_state = %d (%s)\n", + meta_verbose ("must_be_viewable = %d attrs.map_state = %d (%s)\n", + must_be_viewable, attrs.map_state, (attrs.map_state == IsUnmapped) ? "IsUnmapped" : @@ -205,6 +222,8 @@ meta_window_new (MetaDisplay *display, Window xwindow, } existing_wm_state = state; + meta_verbose ("WM_STATE of %lx = %s\n", xwindow, + wm_state_to_string (existing_wm_state)); } meta_error_trap_push (display); @@ -768,7 +787,21 @@ meta_window_free (MetaWindow *window) /* FIXME restore original size if window has maximized */ if (window->withdrawn) - set_wm_state (window, WithdrawnState); + { + /* We need to clean off the window's state so it + * won't be restored if the app maps it again. + */ + meta_error_trap_push (window->display); + meta_verbose ("Cleaning state from window %s\n", window->desc); + XDeleteProperty (window->display->xdisplay, + window->xwindow, + window->display->atom_net_wm_desktop); + XDeleteProperty (window->display->xdisplay, + window->xwindow, + window->display->atom_net_wm_state); + set_wm_state (window, WithdrawnState); + meta_error_trap_pop (window->display); + } if (window->frame) meta_window_destroy_frame (window); @@ -811,7 +844,10 @@ set_wm_state (MetaWindow *window, int state) { unsigned long data[2]; - + + meta_verbose ("Setting wm state %s on %s\n", + wm_state_to_string (state), window->desc); + /* twm sets the icon window as data[1], I couldn't find that in * ICCCM. */ @@ -1072,7 +1108,10 @@ meta_window_flush_calc_showing (MetaWindow *window) void meta_window_queue_calc_showing (MetaWindow *window) { - if (window->unmanaging) + /* if withdrawn = TRUE then unmanaging should also be TRUE, + * really. + */ + if (window->unmanaging || window->withdrawn) return; if (window->calc_showing_queued) @@ -2628,7 +2667,10 @@ meta_window_set_current_workspace_hint (MetaWindow *window) unsigned long data[1]; if (window->workspaces == NULL) - return Success; /* this happens when destroying windows */ + { + /* this happens when unmanaging windows */ + return Success; + } data[0] = meta_window_get_net_wm_desktop (window); |