static void impl_deactivate (EogWindowActivatable *activatable) { EogMapPlugin *plugin = EOG_MAP_PLUGIN (activatable); GtkWidget *sidebar, *thumbview; eog_debug (DEBUG_PLUGINS); sidebar = eog_window_get_sidebar (plugin->window); eog_sidebar_remove_page (EOG_SIDEBAR (sidebar), plugin->viewport); thumbview = eog_window_get_thumb_view (plugin->window); if (thumbview && plugin->selection_changed_id > 0) { g_signal_handler_disconnect (thumbview, plugin->selection_changed_id); plugin->selection_changed_id = 0; } if (plugin->window && plugin->win_prepared_id > 0) { g_signal_handler_disconnect (plugin->window, plugin->win_prepared_id); plugin->win_prepared_id = 0; } }
static void prepared_cb (EogWindow *window, EogMapPlugin *plugin) { plugin->store = eog_window_get_store (plugin->window); if (!plugin->store) return; if (plugin->win_prepared_id > 0) { g_signal_handler_disconnect (window, plugin->win_prepared_id); plugin->win_prepared_id = 0; } /* At this point, the collection has been filled */ gtk_tree_model_foreach (GTK_TREE_MODEL (plugin->store), (GtkTreeModelForeachFunc) for_each_thumb, plugin); plugin->thumbview = eog_window_get_thumb_view (window); plugin->selection_changed_id = g_signal_connect (G_OBJECT (plugin->thumbview), "selection-changed", G_CALLBACK (selection_changed_cb), plugin); /* Call the callback because if the plugin is activated after * the image is loaded, selection_changed isn't emited */ selection_changed_cb (EOG_THUMB_VIEW (plugin->thumbview), plugin); }
static void eog_reload_plugin_activate (EogWindowActivatable *activatable) { const gchar * const accel_keys[] = { "R", NULL }; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); GMenu *model, *menu; GMenuItem *item; GSimpleAction *action; eog_debug (DEBUG_PLUGINS); model= eog_window_get_gear_menu_section (plugin->window, "plugins-section"); g_return_if_fail (G_IS_MENU (model)); /* Setup and inject action */ action = g_simple_action_new (EOG_RELOAD_PLUGIN_ACTION, NULL); g_signal_connect(action, "activate", G_CALLBACK (reload_cb), plugin->window); g_action_map_add_action (G_ACTION_MAP (plugin->window), G_ACTION (action)); g_object_unref (action); g_signal_connect (G_OBJECT (eog_window_get_thumb_view (plugin->window)), "selection-changed", G_CALLBACK (_selection_changed_cb), plugin); eog_reload_plugin_update_action_state (plugin); /* Append entry to the window's gear menu */ menu = g_menu_new (); g_menu_append (menu, _("Reload Image"), "win." EOG_RELOAD_PLUGIN_ACTION); item = g_menu_item_new_section (NULL, G_MENU_MODEL (menu)); g_menu_item_set_attribute (item, "id", "s", EOG_RELOAD_PLUGIN_MENU_ID); g_menu_item_set_attribute (item, G_MENU_ATTRIBUTE_ICON, "s", "view-refresh-symbolic"); g_menu_append_item (model, item); g_object_unref (item); g_object_unref (menu); /* Define accelerator keys */ gtk_application_set_accels_for_action (GTK_APPLICATION (EOG_APP), "win." EOG_RELOAD_PLUGIN_ACTION, accel_keys); }
static void eog_reload_plugin_deactivate (EogWindowActivatable *activatable) { const gchar * const empty_accels[1] = { NULL }; EogReloadPlugin *plugin = EOG_RELOAD_PLUGIN (activatable); GMenu *menu; GMenuModel *model; gint i; eog_debug (DEBUG_PLUGINS); menu = eog_window_get_gear_menu_section (plugin->window, "plugins-section"); g_return_if_fail (G_IS_MENU (menu)); /* Remove menu entry */ model = G_MENU_MODEL (menu); for (i = 0; i < g_menu_model_get_n_items (model); i++) { gchar *id; if (g_menu_model_get_item_attribute (model, i, "id", "s", &id)) { const gboolean found = (g_strcmp0 (id, EOG_RELOAD_PLUGIN_MENU_ID) == 0); g_free (id); if (found) { g_menu_remove (menu, i); break; } } } /* Unset accelerator */ gtk_application_set_accels_for_action(GTK_APPLICATION (EOG_APP), "win." EOG_RELOAD_PLUGIN_ACTION, empty_accels); /* Disconnect selection-changed handler as the thumbview would * otherwise still cause callbacks during its own disposal */ g_signal_handlers_disconnect_by_func (eog_window_get_thumb_view (plugin->window), _selection_changed_cb, plugin); /* Finally remove action */ g_action_map_remove_action (G_ACTION_MAP (plugin->window), EOG_RELOAD_PLUGIN_ACTION); }
static void eog_reload_plugin_update_action_state (EogReloadPlugin *plugin) { GAction *action; EogThumbView *thumbview; gboolean enable = FALSE; thumbview = EOG_THUMB_VIEW (eog_window_get_thumb_view (plugin->window)); if (G_LIKELY (thumbview)) { enable = (eog_thumb_view_get_n_selected (thumbview) != 0); } action = g_action_map_lookup_action (G_ACTION_MAP (plugin->window), EOG_RELOAD_PLUGIN_ACTION); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), enable); }
static void postr_cb (GSimpleAction *simple, GVariant *parameter, gpointer user_data) { EogWindow *window; GtkWidget *thumbview; GList *images, *i; gchar *cmd = g_strdup ("postr "); eog_debug(DEBUG_PLUGINS); g_return_if_fail (EOG_IS_WINDOW (user_data)); window = EOG_WINDOW (user_data); thumbview = eog_window_get_thumb_view (window); images = eog_thumb_view_get_selected_images (EOG_THUMB_VIEW (thumbview)); for (i = g_list_first (images); i; i = i->next) { EogImage *image = (EogImage *) i->data; GFile *imgfile; gchar *imgpath; gchar *oldcmd = cmd; imgfile = eog_image_get_file (image); imgpath = g_file_get_path (imgfile); if (G_LIKELY (imgpath != NULL)) { cmd = g_strconcat (oldcmd, "\"", imgpath, "\"", " ", NULL); g_free (oldcmd); } g_free (imgpath); g_object_unref (imgfile); } g_spawn_command_line_async (cmd, NULL); g_list_free_full (images, g_object_unref); g_free (cmd); }