summaryrefslogtreecommitdiff
path: root/libmdock/mdock-item-menu.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmdock/mdock-item-menu.c')
-rw-r--r--libmdock/mdock-item-menu.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/libmdock/mdock-item-menu.c b/libmdock/mdock-item-menu.c
index 04b3571..6121cdb 100644
--- a/libmdock/mdock-item-menu.c
+++ b/libmdock/mdock-item-menu.c
@@ -38,6 +38,7 @@ struct _MDockItemMenuPrivate
GPtrArray *menu_recent;
GCancellable *recent_fetch;
+ time_t recent_fetch_time;
};
G_DEFINE_TYPE (MDockItemMenu, mdock_item_menu, GTK_TYPE_MENU)
@@ -52,6 +53,8 @@ static GParamSpec *obj_properties[N_PROPERTIES] = { NULL };
#ifdef HAVE_ZEITGEIST
+#define RECENT_FETCH_MIN_INTERVAL 15
+
G_DEFINE_QUARK(mdock-item-menu-file, mdock_item_menu_file)
static void clear_recent_menu(MDockItemMenu *self)
@@ -166,6 +169,7 @@ static void refresh_recent_menu(MDockItemMenu *self)
}
self->priv->recent_fetch = g_cancellable_new();
+ time(&self->priv->recent_fetch_time);
GDesktopAppInfo *appinfo = mdock_item_get_desktop_app_info(self->item);
if (!appinfo) {
@@ -173,6 +177,8 @@ static void refresh_recent_menu(MDockItemMenu *self)
return;
}
+ g_debug("refreshing recent menu");
+
ZeitgeistTimeRange *range = zeitgeist_time_range_new_anytime();
GPtrArray *templs = g_ptr_array_new_full(1, (GDestroyNotify)g_object_unref);
@@ -187,6 +193,19 @@ static void refresh_recent_menu(MDockItemMenu *self)
g_object_unref(range);
g_ptr_array_unref(templs);
}
+
+static gboolean handle_menu_map(MDockItemMenu *self, GdkEventAny *event)
+{
+ time_t now;
+ time(&now);
+
+ if (now - self->priv->recent_fetch_time > RECENT_FETCH_MIN_INTERVAL) {
+ refresh_recent_menu(self);
+ }
+
+ return FALSE;
+}
+
#endif
static void handle_item_pinned(MDockItemMenu *self, GParamSpec *spec, MDockItem *item)
@@ -284,6 +303,8 @@ mdock_item_menu_constructed(GObject *object)
handle_item_pinned(self, NULL, self->item);
#ifdef HAVE_ZEITGEIST
+ g_signal_connect(self, "map-event",
+ G_CALLBACK(handle_menu_map), self);
refresh_recent_menu(self);
#endif
}