summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHavoc Pennington <hp@pobox.com>2002-03-10 15:48:38 +0000
committerHavoc Pennington <hp@src.gnome.org>2002-03-10 15:48:38 +0000
commit447eba6007aa221ec18a2c76569cf792bfe24009 (patch)
tree7b86433cbf99976a7b093c0b84e11ac030433b18
parent5e8ceda7e79bc0218df0364e34f303d298887b24 (diff)
downloadmetacity-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--ChangeLog12
-rw-r--r--src/core.c4
-rw-r--r--src/display.c3
-rwxr-xr-xsrc/run-metacity.sh2
-rw-r--r--src/screen.c3
-rw-r--r--src/window.c52
6 files changed, 69 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 29297f08..b09035e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/src/core.c b/src/core.c
index b2baa7b0..89b29450 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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);