static void action_info (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkamList *list = GTKAM_LIST (callback_data); GtkWidget *d; GtkamCamera *camera; gchar *folder; gchar *name; GtkamListInfoUpdatedData *data; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); d = gtkam_info_new (camera, folder, name); g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, d); g_object_unref (G_OBJECT (d)); g_free (folder); g_free (name); data = g_new0 (GtkamListInfoUpdatedData, 1); data->list = list; data->iter = gtk_tree_iter_copy (&list->priv->iter); g_signal_connect (G_OBJECT (d), "info_updated", G_CALLBACK (on_info_updated), data); g_signal_connect (G_OBJECT (d), "destroy", G_CALLBACK (on_info_destroy), data); }
static gboolean selection_func (GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer data) { GtkTreeIter iter; gchar *folder, *name; GtkamList *list = GTKAM_LIST (data); GtkamListFileSelectedData sd; GtkamListFileUnselectedData ud; gtk_tree_model_get_iter (model, &iter, path); folder = gtkam_list_get_folder_from_iter (list, &iter); name = gtkam_list_get_name_from_iter (list, &iter); if (path_currently_selected) { ud.camera = gtkam_list_get_camera_from_iter (list, &iter); ud.folder = folder; ud.name = name; g_signal_emit (G_OBJECT (list), signals[FILE_UNSELECTED], 0, &ud); } else { sd.camera = gtkam_list_get_camera_from_iter (list, &iter); sd.folder = folder; sd.name = name; g_signal_emit (G_OBJECT (list), signals[FILE_SELECTED], 0, &sd); } g_free (name); g_free (folder); return (TRUE); }
static gboolean show_thumbnails_foreach_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { GtkamList *list = GTKAM_LIST (data); GtkamCamera *camera; gchar *folder, *name; CameraAbilities a; GetThumbnailData *d; camera = gtkam_list_get_camera_from_iter (list, iter); folder = gtkam_list_get_folder_from_iter (list, iter); name = gtkam_list_get_name_from_iter (list, iter); gp_camera_get_abilities (camera->camera, &a); if (a.file_operations & GP_FILE_OPERATION_PREVIEW) { d = g_new0 (GetThumbnailData, 1); d->camera = camera; g_object_ref (G_OBJECT (camera)); d->folder = g_strdup (folder); d->name = g_strdup (name); d->iter = gtk_tree_iter_copy (iter); if (list->priv->tail) ((GetThumbnailData*) list->priv->tail)->next = d; list->priv->tail = d; if (list->priv->head == NULL) list->priv->head = d; } g_free (folder); g_free (name); return (FALSE); }
static gboolean gtkam_list_get_iter (GtkamList *list, GtkTreeIter *iter, GtkamCamera *camera, const gchar *folder, const gchar *name) { gint n, i; gchar *f, *na; n = gtk_tree_model_iter_n_children ( GTK_TREE_MODEL (list->priv->store), NULL); for (i = 0; i < n; i++) { gtk_tree_model_iter_nth_child ( GTK_TREE_MODEL (list->priv->store), iter, NULL, i); if (camera != gtkam_list_get_camera_from_iter (list, iter)) continue; f = gtkam_list_get_folder_from_iter (list, iter); if (strcmp (folder, f)) { g_free (f); continue; } if (name) { na = gtkam_list_get_name_from_iter (list, iter); if (strcmp (name, na)) { g_free (na); continue; } } break; } return (i != n); }
static void selection_foreach_func (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { gchar *name; GtkamList *list = GTKAM_LIST (data); name = gtkam_list_get_name_from_iter (list, iter); g_message (" '%s'", name); g_free (name); }
static void action_save (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkWidget *s; GtkamList *list = GTKAM_LIST (callback_data); GtkamCamera *camera; gchar *folder; gchar *name; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); s = gtkam_save_new (GTK_WINDOW (gtk_widget_get_toplevel( GTK_WIDGET(list) ))); gtkam_save_add (GTKAM_SAVE (s), camera, folder, name); g_free (folder); g_free (name); g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, s); g_object_unref (G_OBJECT (s)); }
static void action_exif (gpointer callback_data, guint callback_action, GtkWidget *widget) { GtkamList *list = GTKAM_LIST (callback_data); GtkamCamera *camera; gchar *folder; gchar *name; GtkWidget *d; camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); name = gtkam_list_get_name_from_iter (list, &list->priv->iter); d = gtkam_exif_new (camera, folder, name); g_free (folder); g_free (name); if (!d) return; g_signal_emit (G_OBJECT (list), signals[NEW_DIALOG], 0, d); g_object_unref (G_OBJECT (d)); }
static gint on_button_press_event (GtkWidget *widget, GdkEventButton *event, GtkamList *list) { GtkTreePath *path = NULL; GtkWidget *w; GtkamCamera *camera; CameraAbilities a; switch (event->button) { case 3: if (!gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (list), event->x, event->y, &path, NULL, NULL, NULL)) return (FALSE); gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->store), &list->priv->iter, path); gtk_tree_path_free (path); camera = gtkam_list_get_camera_from_iter (list, &list->priv->iter); gp_camera_get_abilities (camera->camera, &a); /* What operations does the camera support? */ w = gtk_item_factory_get_widget (list->priv->factory, "/Delete"); gtk_widget_set_sensitive (w, (a.file_operations & GP_FILE_OPERATION_DELETE)); #ifdef HAVE_BONOBO { Bonobo_ServerInfoList *l; guint i; GtkWidget *item, *c; CORBA_Environment ev; CameraFileInfo finfo; gchar *fo, *fi, *query; ViewAsData *d; GList *cl; w = gtk_item_factory_get_widget (list->priv->factory, "/View with..."); c = gtk_item_factory_get_widget (list->priv->factory, "/View with.../Built-in viewer"); cl = gtk_container_get_children (GTK_CONTAINER (w)); for (i = 0; i < g_list_length (cl); i++) { if (g_list_nth_data (cl, i) != c) gtk_container_remove (GTK_CONTAINER (w), GTK_WIDGET (g_list_nth_data (cl, i))); } fo = gtkam_list_get_folder_from_iter (list, &list->priv->iter); fi = gtkam_list_get_name_from_iter (list, &list->priv->iter); gp_camera_file_get_info (camera->camera, fo, fi, &finfo, NULL); g_free (fo); g_free (fi); if (finfo.file.fields & GP_FILE_INFO_TYPE) { CORBA_exception_init (&ev); query = g_strconcat ("repo_ids.has ('IDL:Bonobo/Control:1.0') AND " "bonobo:supported_mime_types.has ('", finfo.file.type, "')", NULL); l = bonobo_activation_query (query, NULL, &ev); g_free (query); CORBA_exception_free (&ev); if (l && l->_length) { for (i = 0; i < l->_length; i++) { Bonobo_ServerInfo *si = &l->_buffer[i]; const gchar *n; if (!si->iid) continue; n = bonobo_server_info_prop_lookup (si, "name", NULL); if (!n) n = si->iid; item = gtk_menu_item_new_with_label (n); gtk_widget_show (item); gtk_menu_shell_append (GTK_MENU_SHELL (w), item); d = g_new0 (ViewAsData, 1); d->list = list; d->camera = camera; g_object_ref (G_OBJECT (d->camera)); d->folder = gtkam_list_get_folder_from_iter (list, &list->priv->iter); d->file = gtkam_list_get_name_from_iter (list, &list->priv->iter); d->iid = g_strdup (si->iid); g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (on_view_as_activate), d); g_signal_connect (G_OBJECT (item), "destroy", G_CALLBACK (on_menu_item_destroy), d); } } if (l) CORBA_free (l); } } #endif gtk_item_factory_popup (list->priv->factory, event->x_root, event->y_root, event->button, event->time); return (TRUE); default: return (FALSE); } }