Working on support for a desktop window

This commit is contained in:
Pierre Pronchery 2014-04-01 00:48:02 +02:00
parent 25f382aa8e
commit cf14076a7c

View File

@ -219,6 +219,7 @@ static void _idle_background(Desktop * desktop, Config * config);
static void _idle_icons(Desktop * desktop, Config * config); static void _idle_icons(Desktop * desktop, Config * config);
static int _on_message(void * data, uint32_t value1, uint32_t value2, static int _on_message(void * data, uint32_t value1, uint32_t value2,
uint32_t value3); uint32_t value3);
static void _on_realize(gpointer data);
static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event, static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event,
gpointer data); gpointer data);
@ -269,7 +270,9 @@ Desktop * desktop_new(DesktopPrefs * prefs)
desktop->window.width, desktop->window.height); desktop->window.width, desktop->window.height);
gtk_window_set_type_hint(GTK_WINDOW(desktop->desktop), gtk_window_set_type_hint(GTK_WINDOW(desktop->desktop),
GDK_WINDOW_TYPE_HINT_DESKTOP); GDK_WINDOW_TYPE_HINT_DESKTOP);
gtk_widget_realize(desktop->desktop); g_signal_connect_swapped(desktop->desktop, "realize", G_CALLBACK(
_on_realize), desktop);
gtk_widget_show(desktop->desktop);
# if GTK_CHECK_VERSION(2, 14, 0) # if GTK_CHECK_VERSION(2, 14, 0)
desktop->back = gtk_widget_get_window(desktop->desktop); desktop->back = gtk_widget_get_window(desktop->desktop);
# else # else
@ -278,12 +281,13 @@ Desktop * desktop_new(DesktopPrefs * prefs)
#else #else
desktop->desktop = NULL; desktop->desktop = NULL;
desktop->back = desktop->root; desktop->back = desktop->root;
/* XXX avoids a warning about _on_realize() */
_on_realize(desktop);
#endif #endif
/* manage events on the root window */ /* manage events on the root window */
_new_events(desktop, desktop->root); _new_events(desktop, desktop->root);
/* draw the icons and background when idle */ /* draw the icons and background when idle */
_new_icons(desktop); _new_icons(desktop);
g_idle_add(_new_idle, desktop);
return desktop; return desktop;
} }
@ -469,6 +473,15 @@ static void _on_popup_paste(gpointer data);
static void _on_popup_preferences(gpointer data); static void _on_popup_preferences(gpointer data);
static void _on_popup_symlink(gpointer data); static void _on_popup_symlink(gpointer data);
static void _on_realize(gpointer data)
{
Desktop * desktop = data;
if(desktop->refresh_source != 0)
g_source_remove(desktop->refresh_source);
desktop->refresh_source = g_idle_add(_new_idle, desktop);
}
static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event, static GdkFilterReturn _on_root_event(GdkXEvent * xevent, GdkEvent * event,
gpointer data) gpointer data)
{ {
@ -2351,7 +2364,9 @@ static void _on_preferences_apply(gpointer data)
char buf[12]; char buf[12];
/* XXX not very efficient */ /* XXX not very efficient */
g_idle_add(_new_idle, desktop); if(desktop->refresh_source)
g_source_remove(desktop->refresh_source);
desktop->refresh_source = g_idle_add(_new_idle, desktop);
if((config = _desktop_get_config(desktop)) == NULL) if((config = _desktop_get_config(desktop)) == NULL)
return; return;
/* background */ /* background */