diff options
Diffstat (limited to 'libmdock/mdock-item-menu.c')
-rw-r--r-- | libmdock/mdock-item-menu.c | 21 |
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 } |