New demo for window migration between different displays and screens.
Thu Aug 1 19:09:39 2002 Owen Taylor <otaylor@redhat.com> * demos/gtk-demo/changedisplay.c: New demo for window migration between different displays and screens. * gtk/gtkrc.c gtkstyle.[ch]: Add _gtk_style_init_for_settings(), so that gtkrc.c can initialize the styles it creates for the right display. * gdk/gdkdisplaymanager.c (gdk_screen_get_default) * gtk/gtksettings.c (gtk_settings_get_default) * gtk/gtkstyle.c (gtk_style_init): Handle absence of a default screen. * gdk/x11/gdkmain-x11.c (_gdk_windowing_set_default_display): Handle display == NULL.x * gdk/gdkdisplay.c (gdk_display_dispose): Free the event queue. * gdk/x11/gdkevents-x11.c gdk/x11/gdkdisplay-x11.c: Remove the event source when closing a display. * gdk/gdkdisplay.[ch]: Add a ::closed signal, dispose() isn't convenient enough by itself. * gdk/x11/gdkevents-x11.c (gdk_xsettings_watch_cb): Create foreign windows for watch windows if there isn't an existing window, instead of installing a global filter. * gdk/x11/gdkscreen-x11.c gdk/x11/gdkprivate-x11.h gdk/x11/gdkevents-x11.c (_gdk_x11_events_uninit_screen): Clean up the xsettings_client when we are done with it. * gdk/x11/gdkevents-x11.c (_gdk_events_init): Remove excess call to _gdk_x11_events_init_screen()
This commit is contained in:
@ -169,6 +169,15 @@ _gdk_x11_events_init_screen (GdkScreen *screen)
|
||||
screen);
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_x11_events_uninit_screen (GdkScreen *screen)
|
||||
{
|
||||
GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
|
||||
|
||||
xsettings_client_destroy (screen_x11->xsettings_client);
|
||||
screen_x11->xsettings_client = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_events_init (GdkDisplay *display)
|
||||
{
|
||||
@ -180,7 +189,7 @@ _gdk_events_init (GdkDisplay *display)
|
||||
GDK_NOTE (MISC, g_message ("connection number: %d", connection_number));
|
||||
|
||||
|
||||
source = gdk_display_source_new (display);
|
||||
source = display_x11->event_source = gdk_display_source_new (display);
|
||||
display_source = (GdkDisplaySource*) source;
|
||||
g_source_set_priority (source, GDK_PRIORITY_EVENTS);
|
||||
|
||||
@ -198,8 +207,6 @@ _gdk_events_init (GdkDisplay *display)
|
||||
gdk_atom_intern ("WM_PROTOCOLS", FALSE),
|
||||
gdk_wm_protocols_filter,
|
||||
NULL);
|
||||
|
||||
_gdk_x11_events_init_screen (display_x11->default_screen);
|
||||
}
|
||||
|
||||
|
||||
@ -2371,17 +2378,29 @@ gdk_xsettings_client_event_filter (GdkXEvent *xevent,
|
||||
|
||||
static void
|
||||
gdk_xsettings_watch_cb (Window window,
|
||||
Bool is_start,
|
||||
long mask,
|
||||
void *cb_data)
|
||||
Bool is_start,
|
||||
long mask,
|
||||
void *cb_data)
|
||||
{
|
||||
GdkWindow *gdkwin;
|
||||
GdkScreen *screen = cb_data;
|
||||
GdkScreenX11 *screen_x11 = GDK_SCREEN_X11 (screen);
|
||||
|
||||
gdkwin = gdk_window_lookup_for_display (gdk_screen_get_display (screen), window);
|
||||
|
||||
|
||||
if (is_start)
|
||||
gdk_window_add_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
{
|
||||
if (!gdkwin)
|
||||
gdkwin = gdk_window_foreign_new_for_display (gdk_screen_get_display (screen), window);
|
||||
else
|
||||
g_object_ref (gdkwin);
|
||||
|
||||
gdk_window_add_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
}
|
||||
else
|
||||
gdk_window_remove_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
{
|
||||
g_assert (gdkwin);
|
||||
gdk_window_remove_filter (gdkwin, gdk_xsettings_client_event_filter, screen);
|
||||
g_object_unref (gdkwin);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user