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
This commit is contained in:
Havoc Pennington 2002-03-10 15:48:38 +00:00 committed by Havoc Pennington
parent 5e8ceda7e7
commit 447eba6007
6 changed files with 69 additions and 7 deletions

View File

@ -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

View File

@ -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)

View File

@ -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";

View File

@ -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

View File

@ -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,

View File

@ -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)
{
/* 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);
@ -812,6 +845,9 @@ set_wm_state (MetaWindow *window,
{
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);