/* * Configure the GtkIconView: background color, visual columns, drag-and-drop, * and icon activation. */ static void set_up_icon_view(GtkWidget *icons, struct state *d) { /* Background color */ GdkRGBA transparent = {0, 0, 0, 0}; override_background_color(icons, &transparent); /* Columns */ gtk_icon_view_set_text_column(d->icon_view, FILE_NAME); gtk_icon_view_set_pixbuf_column(d->icon_view, FILE_ICON); /* Drag */ gtk_drag_source_set(icons, GDK_BUTTON1_MASK, dnd_targets, TARGET_COUNT, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_source_add_text_targets(icons); gtk_drag_source_add_uri_targets(icons); g_signal_connect(icons, "drag-begin", G_CALLBACK(on_icons_drag_begin), d); g_signal_connect(icons, "drag-data-get", G_CALLBACK(on_icons_drag_data_get), d); g_signal_connect(icons, "drag-end", G_CALLBACK(on_icons_drag_end), d); /* Drop */ gtk_drag_dest_set(icons, GTK_DEST_DEFAULT_ALL, dnd_targets, TARGET_COUNT, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_dest_add_text_targets(icons); gtk_drag_dest_add_uri_targets(icons); g_signal_connect(icons, "drag-motion", G_CALLBACK(on_icons_drag_motion), d); g_signal_connect(icons, "drag-leave", G_CALLBACK(on_icons_data_leave), d); g_signal_connect(icons, "drag-data-received", G_CALLBACK(on_icons_drag_data_received), d); /* Activations */ g_signal_connect(icons, "item-activated", G_CALLBACK(on_icons_item_activated), d); g_signal_connect(icons, "button-press-event", G_CALLBACK(on_desktop_icon_button_press_event), d); }
int clip_GTK_DRAGSOURCEADDURITARGETS(ClipMachine * cm) { C_widget *cwid = _fetch_cw_arg(cm); CHECKCWID(cwid, GTK_IS_WIDGET); gtk_drag_source_add_uri_targets(GTK_WIDGET(cwid->widget)); return 0; err: return 1; }
static void tile_setup (Tile * tile) { gtk_button_set_relief (GTK_BUTTON (tile), GTK_RELIEF_NONE); if (tile->uri) { gtk_drag_source_set (GTK_WIDGET (tile), GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_source_add_uri_targets (GTK_WIDGET (tile)); } }
static void _fill_submenu_with_items (CDQuickBrowserItem *pRootItem, int iNbSubItemsAtOnce) { GldiModuleInstance *myApplet = pRootItem->pApplet; GtkWidget *pMenu = pRootItem->pSubMenu; GList *pFirstItem = pRootItem->pCurrentItem; // static GtkTargetEntry s_pMenuItemTargets[] = { {(gchar*) "text/uri-list", 0, 0} }; // for drag and drop support CDQuickBrowserItem *pItem; gchar *cFileName; GtkWidget *pMenuItem; gchar *cName = NULL, *cURI = NULL, *cIconName = NULL; gboolean bIsDirectory; int iVolumeID; double fOrder; GList *l; int i; for (l = pFirstItem, i = 0; l != NULL && i < iNbSubItemsAtOnce; l = l->next, i ++) { pItem = l->data; //\______________ On cree l'entree avec son icone si necessaire. if (myConfig.bHasIcons) { cairo_dock_fm_get_file_info (pItem->cPath, &cName, &cURI, &cIconName, &bIsDirectory, &iVolumeID, &fOrder, 0); g_free (cName); cName = NULL; g_free (cURI); cURI = NULL; } cFileName = strrchr (pItem->cPath, '/'); if (cFileName) cFileName ++; if (cIconName != NULL) { gchar *cPath = cairo_dock_search_icon_s_path (cIconName, cairo_dock_search_icon_size (GTK_ICON_SIZE_MENU)); pMenuItem = gldi_menu_item_new (cFileName, cPath); g_free (cPath); g_free (cIconName); cIconName = NULL; } else { pMenuItem = gldi_menu_item_new (cFileName, ""); } //\______________ On l'insere dans le menu. gtk_menu_shell_append (GTK_MENU_SHELL (pMenu), pMenuItem); if (pItem->pSubMenu != NULL) { gtk_menu_item_set_submenu (GTK_MENU_ITEM (pMenuItem), pItem->pSubMenu); } else { //\______________ Add drag and drop support for files only gtk_drag_source_set (pMenuItem, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK, NULL, 0, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); gtk_drag_source_add_text_targets (pMenuItem); gtk_drag_source_add_uri_targets (pMenuItem); g_signal_connect (G_OBJECT (pMenuItem), "button-release-event", G_CALLBACK(_on_click_item), pItem); // left and right click g_signal_connect (G_OBJECT (pMenuItem), "drag-begin", G_CALLBACK (_drag_begin), pMenuItem); // to create pixbuf g_signal_connect (G_OBJECT (pMenuItem), "drag-data-get", G_CALLBACK (_drag_data_get), pItem); // when the item is dropped } g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK(_on_activate_item), pItem); // select or over (submenu) } pRootItem->pCurrentItem = l; }
/* * Set up the window: build the interface, connect the signals, insert the * file icons. */ static GtkWidget * prepare_window(char *dir, struct geometry *geometry, struct state *d) { GtkBuilder *builder; GtkWidget *icons, *window, *directory_close, *file_open; GtkWidget *directory_up, *directory_open, *help_about; GtkListStore *model; builder = gtk_builder_new_from_file(INTERFACE_PATH); window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); icons = GTK_WIDGET(gtk_builder_get_object(builder, "icons")); directory_up = GTK_WIDGET(gtk_builder_get_object(builder, "directory-up-menu-item")); directory_open = GTK_WIDGET(gtk_builder_get_object(builder, "directory-open-menu-item")); directory_close = GTK_WIDGET(gtk_builder_get_object(builder, "directory-close-menu-item")); file_open = GTK_WIDGET(gtk_builder_get_object(builder, "file-open-menu-item")); help_about = GTK_WIDGET(gtk_builder_get_object(builder, "help-about-menu-item")); d->icon_view = GTK_ICON_VIEW(icons); g_object_unref(builder); gtk_window_set_default_size(GTK_WINDOW(window), geometry->w, geometry->h); gtk_window_move(GTK_WINDOW(window), geometry->x, geometry->y); gtk_window_set_title(GTK_WINDOW(window), dir); model = gtk_list_store_new(MODEL_CNT, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); if (populate(model, dir) == -1) err(66, "failed to populate icon model from %s", dir); watch_dir(model, dir); gtk_icon_view_set_text_column(GTK_ICON_VIEW(icons), 0); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(icons), 1); gtk_icon_view_set_model(GTK_ICON_VIEW(icons), GTK_TREE_MODEL(model)); g_object_unref(model); gtk_widget_set_sensitive(directory_up, strlen(d->dir) > 1); /* Drag */ gtk_drag_source_set(icons, GDK_BUTTON1_MASK, dnd_targets, TARGET_COUNT, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_source_add_text_targets(icons); gtk_drag_source_add_uri_targets(icons); g_signal_connect(icons, "drag-begin", G_CALLBACK(on_icons_drag_begin), d); g_signal_connect(icons, "drag-data-get", G_CALLBACK(on_icons_drag_data_get), d); g_signal_connect(icons, "drag-end", G_CALLBACK(on_icons_drag_end), d); /* Drop */ gtk_drag_dest_set(icons, GTK_DEST_DEFAULT_ALL, dnd_targets, TARGET_COUNT, GDK_ACTION_COPY | GDK_ACTION_MOVE); gtk_drag_dest_add_text_targets(icons); gtk_drag_dest_add_uri_targets(icons); g_signal_connect(icons, "drag-motion", G_CALLBACK(on_icons_drag_motion), d); g_signal_connect(icons, "drag-leave", G_CALLBACK(on_icons_data_leave), d); g_signal_connect(icons, "drag-data-received", G_CALLBACK(on_icons_drag_data_received), d); /* Activations */ g_signal_connect(icons, "item-activated", G_CALLBACK(on_icons_item_activated), d); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(window, "configure-event", G_CALLBACK(on_window_configure_event), dir); g_signal_connect(directory_up, "activate", G_CALLBACK(on_directory_up_menu_item_activate), d); g_signal_connect(directory_open, "activate", G_CALLBACK(on_directory_open_menu_item_activate), d); g_signal_connect(directory_close, "activate", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(file_open, "activate", G_CALLBACK(on_file_open_menu_item_activate), d); g_signal_connect(help_about, "activate", G_CALLBACK(on_help_about_menu_item_activate), NULL); g_signal_connect(icons, "button-press-event", G_CALLBACK(on_icons_button_press_event), d); return window; }
static VALUE rg_m_source_add_uri_targets(VALUE self, VALUE widget) { gtk_drag_source_add_uri_targets(RVAL2WIDGET(widget)); return self; }
static void combobox_changed (GtkComboBox *combobox, PanelRunDialog *dialog) { char *text; char *start; char *msg; text = g_strdup (panel_run_dialog_get_combo_text (dialog)); start = text; while (*start != '\0' && g_ascii_isspace (*start)) start++; /* update item name to use for dnd */ if (!dialog->use_program_list) { if (dialog->desktop_path) { g_free (dialog->desktop_path); dialog->desktop_path = NULL; } if (dialog->item_name) { g_free (dialog->item_name); dialog->item_name = NULL; } } /* desensitize run button if no text entered */ if (!start || !start [0]) { g_free (text); gtk_widget_set_sensitive (dialog->run_button, FALSE); gtk_drag_source_unset (dialog->run_dialog); if (panel_profile_get_enable_program_list ()) gtk_label_set_text (GTK_LABEL (dialog->program_label), _("Select an application to view its description.")); panel_run_dialog_set_default_icon (dialog, FALSE); if (dialog->find_command_idle_id) { g_source_remove (dialog->find_command_idle_id); dialog->find_command_idle_id = 0; } if (panel_profile_get_enable_program_list ()) { GtkTreeIter iter; GtkTreePath *path; gtk_tree_model_foreach (GTK_TREE_MODEL (dialog->program_list_store), panel_run_dialog_make_all_list_visible, NULL); path = gtk_tree_path_new_first (); if (gtk_tree_model_get_iter (gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->program_list)), &iter, path)) gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (dialog->program_list), path, NULL, FALSE, 0, 0); gtk_tree_path_free (path); } return; } gtk_widget_set_sensitive (dialog->run_button, TRUE); gtk_drag_source_set (dialog->run_dialog, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY); gtk_drag_source_add_uri_targets (dialog->run_dialog); if (panel_profile_get_enable_program_list () && !dialog->use_program_list) { msg = g_strdup_printf (_("Will run command: '%s'"), start); gtk_label_set_text (GTK_LABEL (dialog->program_label), msg); g_free (msg); } /* look up icon for the command */ if (panel_profile_get_enable_program_list () && !dialog->use_program_list && !dialog->find_command_idle_id) dialog->find_command_idle_id = g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc) panel_run_dialog_find_command_idle, dialog, NULL); g_free (text); }
static void eog_thumb_view_constructed (GObject *object) { EogThumbView *thumbview; if (G_OBJECT_CLASS (eog_thumb_view_parent_class)->constructed) G_OBJECT_CLASS (eog_thumb_view_parent_class)->constructed (object); thumbview = EOG_THUMB_VIEW (object); thumbview->priv->pixbuf_cell = gtk_cell_renderer_pixbuf_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (thumbview), thumbview->priv->pixbuf_cell, FALSE); g_object_set (thumbview->priv->pixbuf_cell, "follow-state", FALSE, "height", 100, "width", 115, "yalign", 0.5, "xalign", 0.5, NULL); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (thumbview), thumbview->priv->pixbuf_cell, "pixbuf", EOG_LIST_STORE_THUMBNAIL, NULL); gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (thumbview), GTK_SELECTION_MULTIPLE); gtk_icon_view_set_column_spacing (GTK_ICON_VIEW (thumbview), EOG_THUMB_VIEW_SPACING); gtk_icon_view_set_row_spacing (GTK_ICON_VIEW (thumbview), EOG_THUMB_VIEW_SPACING); g_object_set (thumbview, "has-tooltip", TRUE, NULL); g_signal_connect (thumbview, "query-tooltip", G_CALLBACK (thumbview_on_query_tooltip_cb), NULL); thumbview->priv->start_thumb = 0; thumbview->priv->end_thumb = 0; thumbview->priv->menu = NULL; g_signal_connect (G_OBJECT (thumbview), "parent-set", G_CALLBACK (thumbview_on_parent_set_cb), NULL); gtk_icon_view_enable_model_drag_source (GTK_ICON_VIEW (thumbview), 0, NULL, 0, GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK); gtk_drag_source_add_uri_targets (GTK_WIDGET (thumbview)); g_signal_connect (G_OBJECT (thumbview), "drag-data-get", G_CALLBACK (thumbview_on_drag_data_get_cb), NULL); }