static void pager_destructor(plugin_instance *p) { pager_priv *pg = (pager_priv *)p; ENTER; g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_current_desktop, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_active_window, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), pager_rebuild_all, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_client_list_stacking, pg); gdk_window_remove_filter(NULL, (GdkFilterFunc)pager_event_filter, pg); while (pg->desknum--) { desk_free(pg, pg->desknum); } g_hash_table_foreach_remove(pg->htable, (GHRFunc) task_remove_all, (gpointer)pg); g_hash_table_destroy(pg->htable); gtk_widget_destroy(pg->box); if (pg->wallpaper) { g_signal_handlers_disconnect_by_func(G_OBJECT (pg->fbbg), pager_bg_changed, pg); DBG("put fbbg %p\n", pg->fbbg); g_object_unref(pg->fbbg); } if (pg->wins) XFree(pg->wins); RET(); }
static void pager_destructor(Plugin *p) { pager *pg = (pager *)p->priv; ENTER; g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_current_desktop, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_active_window, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), pager_rebuild_all, pg); g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), do_net_client_list_stacking, pg); gdk_window_remove_filter(NULL, (GdkFilterFunc)pager_event_filter, pg); while (--pg->desknum) { desk_free(pg, pg->desknum); } g_hash_table_foreach_remove(pg->htable, (GHRFunc) task_remove_all, (gpointer)pg); g_hash_table_destroy(pg->htable); gtk_widget_destroy(pg->eb); g_free(pg); RET(); }
static void pager_rebuild_all(FbEv *ev, pager_priv *pg) { int desknum, dif, i; int curdesk G_GNUC_UNUSED; ENTER; desknum = pg->desknum; curdesk = pg->curdesk; pg->desknum = get_net_number_of_desktops(); if (pg->desknum < 1) pg->desknum = 1; else if (pg->desknum > MAX_DESK_NUM) { pg->desknum = MAX_DESK_NUM; ERR("pager: max number of supported desks is %d\n", MAX_DESK_NUM); } pg->curdesk = get_net_current_desktop(); if (pg->curdesk >= pg->desknum) pg->curdesk = 0; DBG("desknum=%d curdesk=%d\n", desknum, curdesk); DBG("pg->desknum=%d pg->curdesk=%d\n", pg->desknum, pg->curdesk); dif = pg->desknum - desknum; if (dif == 0) RET(); if (dif < 0) { /* if desktops were deleted then delete their maps also */ for (i = pg->desknum; i < desknum; i++) desk_free(pg, i); } else { for (i = desknum; i < pg->desknum; i++) desk_new(pg, i); } g_hash_table_foreach_remove(pg->htable, (GHRFunc) task_remove_all, (gpointer)pg); do_net_current_desktop(NULL, pg); do_net_client_list_stacking(NULL, pg); RET(); }
static void pager_rebuild_all(FbEv *ev, pager *pg) { int desknum, curdesk, dif, i; ENTER; desknum = pg->desknum; curdesk = pg->curdesk; pg->desknum = get_net_number_of_desktops(); if (pg->desknum < 1) pg->desknum = 1; else if (pg->desknum > MAX_DESK_NUM) { pg->desknum = MAX_DESK_NUM; ERR("pager: max number of supported desks is %d\n", MAX_DESK_NUM); } pg->curdesk = get_net_current_desktop(); if (pg->curdesk >= pg->desknum) pg->curdesk = 0; DBG("desknum=%d curdesk=%d\n", desknum, curdesk); DBG("pg->desknum=%d pg->curdesk=%d\n", pg->desknum, pg->curdesk); dif = pg->desknum - desknum; if (dif == 0) RET(); if (dif < 0) { /* if desktops were deleted then delete their maps also */ for (i = pg->desknum; i < desknum; i++) desk_free(pg, i); } else { for (i = desknum; i < pg->desknum; i++) desk_new(pg, i); } do_net_client_list_stacking(NULL, pg); RET(); }