summaryrefslogtreecommitdiff
path: root/libmdock/mdock-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmdock/mdock-window.c')
-rw-r--r--libmdock/mdock-window.c28
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);