/* * 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_DRAGSOURCEADDTEXTTARGETS(ClipMachine * cm) { C_widget *cwid = _fetch_cw_arg(cm); CHECKCWID(cwid, GTK_IS_WIDGET); gtk_drag_source_add_text_targets(GTK_WIDGET(cwid->widget)); return 0; err: return 1; }
static void set_drag_source_enabled (GcalEventWidget *self, gboolean enabled) { GtkWidget *widget = GTK_WIDGET (self); if (enabled) { /* Setup the event widget as a drag source */ gtk_drag_source_set (widget, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_MOVE); gtk_drag_source_add_text_targets (widget); } else { gtk_drag_source_unset (GTK_WIDGET (widget)); } }
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_text_targets(VALUE self, VALUE widget) { gtk_drag_source_add_text_targets(RVAL2WIDGET(widget)); return self; }
static GtkWidget *cm_tree_prepare(CookieManagerPage *cmp) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *sel; GtkWidget *item; GtkWidget *menu; GtkWidget *treeview; CookieManagerPagePrivate *priv = cmp->priv; treeview = priv->treeview = gtk_tree_view_new(); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _("Name"), renderer, "text", COOKIE_MANAGER_COL_NAME, NULL); gtk_tree_view_column_set_expand (column, TRUE); gtk_tree_view_column_set_sort_indicator(column, TRUE); gtk_tree_view_column_set_sort_column_id(column, COOKIE_MANAGER_COL_NAME); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_cell_data_func(column, renderer, (GtkTreeCellDataFunc) cm_tree_render_text_cb, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(treeview), TRUE); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(treeview), FALSE); gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview), COOKIE_MANAGER_COL_NAME); /* selection handling */ sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); gtk_tree_selection_set_mode(sel, GTK_SELECTION_MULTIPLE); /* signals */ g_signal_connect(sel, "changed", G_CALLBACK(cm_tree_selection_changed_cb), cmp); g_signal_connect(treeview, "key-press-event", G_CALLBACK(cm_tree_key_press_cb), cmp); g_signal_connect(treeview, "button-press-event", G_CALLBACK(cm_tree_button_press_event_cb), cmp); g_signal_connect(treeview, "button-release-event", G_CALLBACK(cm_tree_button_release_event_cb), cmp); g_signal_connect(treeview, "popup-menu", G_CALLBACK(cm_tree_popup_menu_cb), cmp); /* tooltips */ gtk_widget_set_has_tooltip(treeview, TRUE); g_signal_connect(treeview, "query-tooltip", G_CALLBACK(cm_tree_query_tooltip), cmp); /* drag'n'drop */ gtk_tree_view_enable_model_drag_source( GTK_TREE_VIEW(treeview), GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY ); gtk_drag_source_add_text_targets(treeview); g_signal_connect(treeview, "drag-data-get", G_CALLBACK(cm_tree_drag_data_get_cb), cmp); /* popup menu */ priv->popup_menu = menu = gtk_menu_new(); item = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE, NULL); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); g_signal_connect(item, "activate", G_CALLBACK(cm_button_delete_clicked_cb), cmp); priv->delete_popup_button = item; item = gtk_separator_menu_item_new(); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); item = gtk_image_menu_item_new_with_mnemonic(_("_Expand All")); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU)); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); g_signal_connect(item, "activate", G_CALLBACK(cm_tree_popup_expand_activate_cb), cmp); priv->expand_buttons[2] = item; item = gtk_image_menu_item_new_with_mnemonic(_("_Collapse All")); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), gtk_image_new_from_icon_name(GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU)); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); g_signal_connect(item, "activate", G_CALLBACK(cm_tree_popup_collapse_activate_cb), cmp); priv->expand_buttons[3] = item; return treeview; }