diff options
Diffstat (limited to 'libmdock/mdock-window.c')
-rw-r--r-- | libmdock/mdock-window.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libmdock/mdock-window.c b/libmdock/mdock-window.c index 9a21cde..7690ce6 100644 --- a/libmdock/mdock-window.c +++ b/libmdock/mdock-window.c @@ -3,6 +3,8 @@ #define MDOCK_WINDOW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), MDOCK_TYPE_WINDOW, MDockWindowPrivate)) +#define SCREENSHOT_DELAY 100 + struct _MDockWindowPrivate { GtkTable *table; @@ -10,6 +12,7 @@ struct _MDockWindowPrivate GtkLabel *title; GtkWidget *close_btn; GtkImage *img; + guint screenshot_timeout; gboolean preligth : 1; gboolean selected : 1; }; @@ -43,6 +46,16 @@ static void update_state(MDockWindow *self) } } +static gboolean screenshot_delay_timeout(gpointer user_data) +{ + MDockWindow *self = MDOCK_WINDOW(user_data); + if (wnck_window_is_active(self->window)) { + mdock_window_update_screenshot(self); + } + self->priv->screenshot_timeout = 0; + return G_SOURCE_REMOVE; +} + static gboolean mdock_window_enter_notify(GtkWidget *widget, GdkEventCrossing *event) { MDockWindow *self = MDOCK_WINDOW(widget); @@ -136,6 +149,11 @@ static void mdock_window_constructed(GObject *object) static void mdock_window_dispose(GObject *object) { + MDockWindow *self = MDOCK_WINDOW(self); + if (self->priv->screenshot_timeout) { + g_source_remove(self->priv->screenshot_timeout); + self->priv->screenshot_timeout = 0; + } G_OBJECT_CLASS(mdock_window_parent_class)->dispose(object); } @@ -187,6 +205,16 @@ void mdock_window_update_screenshot(MDockWindow *self) thumbnailer_get_thumbnail(self->window), NULL); } +void mdock_window_schedule_screenshot(MDockWindow *self) +{ + g_return_if_fail(self->window); + if (!self->priv->screenshot_timeout) { + self->priv->screenshot_timeout = gtk_timeout_add(SCREENSHOT_DELAY, + screenshot_delay_timeout, + self); + } +} + MDockWindow *mdock_window_new(WnckWindow *window) { return g_object_new(MDOCK_TYPE_WINDOW, "window", window, NULL); |