int clip_GTK_DRAGDESTADDIMAGETARGETS(ClipMachine * cm) { C_widget *cwid = _fetch_cw_arg(cm); CHECKCWID(cwid, GTK_IS_WIDGET); gtk_drag_dest_add_image_targets(GTK_WIDGET(cwid->widget)); return 0; err: return 1; }
int main (int argc, char **argv) { GtkWidget *window, *grid; GtkWidget *label, *image, *box; GtkIconTheme *theme; GdkPixbuf *pixbuf; GtkIconSet *iconset; GtkIconSource *iconsource; gchar *icon_name = "gnome-terminal"; gchar *anim_filename = NULL; GIcon *icon; GFile *file; gtk_init (&argc, &argv); if (argc > 1) icon_name = argv[1]; if (argc > 2) anim_filename = argv[2]; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); grid = gtk_grid_new (); gtk_container_add (GTK_CONTAINER (window), grid); label = gtk_label_new ("symbolic size"); gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1); label = gtk_label_new ("fixed size"); gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1); label = gtk_label_new ("GTK_IMAGE_PIXBUF"); gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); theme = gtk_icon_theme_get_default (); pixbuf = gtk_icon_theme_load_icon (theme, icon_name, 48, 0, NULL); image = gtk_image_new_from_pixbuf (pixbuf); box = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (box), image); gtk_grid_attach (GTK_GRID (grid), box, 2, 1, 1, 1); gtk_drag_source_set (box, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (box); g_signal_connect (box, "drag_begin", G_CALLBACK (drag_begin), image); g_signal_connect (box, "drag_data_get", G_CALLBACK (drag_data_get), image); gtk_drag_dest_set (box, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, NULL, 0, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (box); g_signal_connect (box, "drag_data_received", G_CALLBACK (drag_data_received), image); label = gtk_label_new ("GTK_IMAGE_STOCK"); gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); image = gtk_image_new_from_stock (GTK_STOCK_REDO, GTK_ICON_SIZE_DIALOG); gtk_grid_attach (GTK_GRID (grid), image, 1, 2, 1, 1); label = gtk_label_new ("GTK_IMAGE_ICON_SET"); gtk_grid_attach (GTK_GRID (grid), label, 0, 3, 1, 1); iconsource = gtk_icon_source_new (); gtk_icon_source_set_icon_name (iconsource, icon_name); iconset = gtk_icon_set_new (); gtk_icon_set_add_source (iconset, iconsource); image = gtk_image_new_from_icon_set (iconset, GTK_ICON_SIZE_DIALOG); gtk_grid_attach (GTK_GRID (grid), image, 1, 3, 1, 1); label = gtk_label_new ("GTK_IMAGE_ICON_NAME"); gtk_grid_attach (GTK_GRID (grid), label, 0, 4, 1, 1); image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG); gtk_grid_attach (GTK_GRID (grid), image, 1, 4, 1, 1); image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_DIALOG); gtk_image_set_pixel_size (GTK_IMAGE (image), 30); gtk_grid_attach (GTK_GRID (grid), image, 2, 4, 1, 1); label = gtk_label_new ("GTK_IMAGE_GICON"); gtk_grid_attach (GTK_GRID (grid), label, 0, 5, 1, 1); icon = g_themed_icon_new_with_default_fallbacks ("folder-remote"); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG); g_object_unref (icon); gtk_grid_attach (GTK_GRID (grid), image, 1, 5, 1, 1); file = g_file_new_for_path ("apple-red.png"); icon = g_file_icon_new (file); image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_DIALOG); g_object_unref (icon); gtk_image_set_pixel_size (GTK_IMAGE (image), 30); gtk_grid_attach (GTK_GRID (grid), image, 2, 5, 1, 1); if (anim_filename) { label = gtk_label_new ("GTK_IMAGE_ANIMATION (from file)"); gtk_grid_attach (GTK_GRID (grid), label, 0, 6, 1, 1); image = gtk_image_new_from_file (anim_filename); gtk_image_set_pixel_size (GTK_IMAGE (image), 30); gtk_grid_attach (GTK_GRID (grid), image, 2, 6, 1, 1); /* produce high load */ g_signal_connect_after (image, "draw", G_CALLBACK (anim_image_draw), NULL); } gtk_widget_show_all (window); gtk_main (); return 0; }
static VALUE rg_m_dest_add_image_targets(VALUE self, VALUE widget) { gtk_drag_dest_add_image_targets(RVAL2WIDGET(widget)); return self; }
MainWindow::MainWindow(GladeSearchpath * gladeSearchPath, Control * control) : GladeGui(gladeSearchPath, "main.glade", "mainWindow") { XOJ_INIT_TYPE(MainWindow); this->control = control; this->toolbarIntialized = false; this->toolbarGroup = NULL; this->selectedToolbar = NULL; this->toolbarWidgets = new GtkWidget*[TOOLBAR_DEFINITIONS_LEN]; for (int i = 0; i < TOOLBAR_DEFINITIONS_LEN; i++) { GtkWidget * w = get(TOOLBAR_DEFINITIONS[i].guiName); g_object_ref(w); this->toolbarWidgets[i] = w; } this->maximized = false; this->toolbarMenuData = NULL; this->toolbarMenuitems = NULL; GtkWidget * tableXournal = get("tableXournal"); this->xournal = new XournalView(tableXournal, control); ScrollbarHideType type = control->getSettings()->getScrollbarHideType(); if (type == SCROLLBAR_HIDE_NONE || type == SCROLLBAR_HIDE_VERTICAL) { Layout * layout = gtk_xournal_get_layout(this->xournal->getWidget()); gtk_table_attach(GTK_TABLE(tableXournal), layout->getScrollbarHorizontal(), 1, 2, 1, 2, (GtkAttachOptions)( GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); } setSidebarVisible(control->getSettings()->isSidebarVisible()); // Window handler g_signal_connect(this->window, "delete-event", (GCallback) & deleteEventCallback, this->control); g_signal_connect(this->window, "window_state_event", G_CALLBACK(&windowStateEventCallback), this); g_signal_connect(get("buttonCloseSidebar"), "clicked", G_CALLBACK(buttonCloseSidebarClicked), this); this->toolbar = new ToolMenuHandler(this->control, this->control->getZoomControl(), this, this->control->getToolHandler(), GTK_WINDOW(getWindow())); char * file = gladeSearchPath->findFile(NULL, "toolbar.ini"); ToolbarModel * tbModel = this->toolbar->getModel(); if (!tbModel->parse(file, true)) { GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(this->window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not parse general toolbar.ini file: %s\nNo Toolbars will be available"), file); gtk_window_set_transient_for(GTK_WINDOW(dlg), GTK_WINDOW(getWindow())); gtk_dialog_run(GTK_DIALOG(dlg)); gtk_widget_hide(dlg); gtk_widget_destroy(dlg); } g_free(file); file = g_build_filename(g_get_home_dir(), G_DIR_SEPARATOR_S, CONFIG_DIR, G_DIR_SEPARATOR_S, TOOLBAR_CONFIG, NULL); if (g_file_test(file, G_FILE_TEST_EXISTS)) { if (!tbModel->parse(file, false)) { GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(this->window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Could not parse custom toolbar.ini file: %s\nToolbars will not be available"), file); gtk_window_set_transient_for(GTK_WINDOW(dlg), GTK_WINDOW(this->control->getWindow()->getWindow())); gtk_dialog_run(GTK_DIALOG(dlg)); gtk_widget_hide(dlg); gtk_widget_destroy(dlg); } } g_free(file); initToolbarAndMenu(); GtkWidget * menuViewSidebarVisible = get("menuViewSidebarVisible"); g_signal_connect(menuViewSidebarVisible, "toggled", (GCallback) viewShowSidebar, this); updateScrollbarSidebarPosition(); gtk_window_set_default_size(GTK_WINDOW(this->window), control->getSettings()->getMainWndWidth(), control->getSettings()->getMainWndHeight()); if (control->getSettings()->isMainWndMaximized()) { gtk_window_maximize(GTK_WINDOW(this->window)); } else { gtk_window_unmaximize(GTK_WINDOW(this->window)); } getSpinPageNo()->addListener(this->control->getScrollHandler()); // Drag and Drop g_signal_connect(this->window, "drag-data-received", G_CALLBACK(dragDataRecived), this); gtk_drag_dest_set(this->window, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY); gtk_drag_dest_add_uri_targets(this->window); gtk_drag_dest_add_image_targets(this->window); gtk_drag_dest_add_text_targets(this->window); }
GtkWidget * do_clipboard (GtkWidget *do_widget) { if (!window) { GtkWidget *vbox, *hbox; GtkWidget *label; GtkWidget *entry, *button; GtkWidget *image; GtkGesture *gesture; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "Clipboard"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); g_object_set (vbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (window), vbox); label = gtk_label_new ("\"Copy\" will copy the text\nin the entry to the clipboard"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the first entry */ entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (hbox), entry); /* Create the button */ button = gtk_button_new_with_mnemonic (_("_Copy")); gtk_container_add (GTK_CONTAINER (hbox), button); g_signal_connect (button, "clicked", G_CALLBACK (copy_button_clicked), entry); label = gtk_label_new ("\"Paste\" will paste the text from the clipboard to the entry"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the second entry */ entry = gtk_entry_new (); gtk_container_add (GTK_CONTAINER (hbox), entry); /* Create the button */ button = gtk_button_new_with_mnemonic (_("_Paste")); gtk_container_add (GTK_CONTAINER (hbox), button); g_signal_connect (button, "clicked", G_CALLBACK (paste_button_clicked), entry); label = gtk_label_new ("Images can be transferred via the clipboard, too"); gtk_container_add (GTK_CONTAINER (vbox), label); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); g_object_set (hbox, "margin", 8, NULL); gtk_container_add (GTK_CONTAINER (vbox), hbox); /* Create the first image */ image = gtk_image_new_from_icon_name ("dialog-warning"); gtk_container_add (GTK_CONTAINER (hbox), image); /* make image a drag source */ gtk_drag_source_set (image, GDK_BUTTON1_MASK, NULL, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (image); g_signal_connect (image, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (image, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on image */ gtk_drag_dest_set (image, GTK_DEST_DEFAULT_ALL, NULL, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (image); g_signal_connect (image, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on image */ gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), image); gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (gesture)); /* Create the second image */ image = gtk_image_new_from_icon_name ("process-stop"); gtk_container_add (GTK_CONTAINER (hbox), image); /* make image a drag source */ gtk_drag_source_set (image, GDK_BUTTON1_MASK, NULL, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (image); g_signal_connect (image, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (image, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on image */ gtk_drag_dest_set (image, GTK_DEST_DEFAULT_ALL, NULL, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (image); g_signal_connect (image, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on image */ gesture = gtk_gesture_multi_press_new (); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY); g_signal_connect (gesture, "pressed", G_CALLBACK (pressed_cb), image); gtk_widget_add_controller (image, GTK_EVENT_CONTROLLER (gesture)); } if (!gtk_widget_get_visible (window)) gtk_widget_show (window); else gtk_widget_destroy (window); return window; }
GtkWidget * do_clipboard (GtkWidget *do_widget) { if (!window) { GtkWidget *vbox, *hbox; GtkWidget *label; GtkWidget *entry, *button; GtkWidget *ebox, *image; GtkClipboard *clipboard; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "Clipboard demo"); g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 8); gtk_container_add (GTK_CONTAINER (window), vbox); label = gtk_label_new ("\"Copy\" will copy the text\nin the entry to the clipboard"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); /* Create the first entry */ entry = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); /* Create the button */ button = gtk_button_new_from_stock (GTK_STOCK_COPY); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (copy_button_clicked), entry); label = gtk_label_new ("\"Paste\" will paste the text from the clipboard to the entry"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); /* Create the second entry */ entry = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); /* Create the button */ button = gtk_button_new_from_stock (GTK_STOCK_PASTE); gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); g_signal_connect (button, "clicked", G_CALLBACK (paste_button_clicked), entry); label = gtk_label_new ("Images can be transferred via the clipboard, too"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 4); gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); /* Create the first image */ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON); ebox = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (ebox), image); gtk_container_add (GTK_CONTAINER (hbox), ebox); /* make ebox a drag source */ gtk_drag_source_set (ebox, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (ebox); g_signal_connect (ebox, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (ebox, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on ebox */ gtk_drag_dest_set (ebox, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (ebox); g_signal_connect (ebox, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on ebox */ g_signal_connect (ebox, "button-press-event", G_CALLBACK (button_press), image); /* Create the second image */ image = gtk_image_new_from_stock (GTK_STOCK_STOP, GTK_ICON_SIZE_BUTTON); ebox = gtk_event_box_new (); gtk_container_add (GTK_CONTAINER (ebox), image); gtk_container_add (GTK_CONTAINER (hbox), ebox); /* make ebox a drag source */ gtk_drag_source_set (ebox, GDK_BUTTON1_MASK, NULL, 0, GDK_ACTION_COPY); gtk_drag_source_add_image_targets (ebox); g_signal_connect (ebox, "drag-begin", G_CALLBACK (drag_begin), image); g_signal_connect (ebox, "drag-data-get", G_CALLBACK (drag_data_get), image); /* accept drops on ebox */ gtk_drag_dest_set (ebox, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY); gtk_drag_dest_add_image_targets (ebox); g_signal_connect (ebox, "drag-data-received", G_CALLBACK (drag_data_received), image); /* context menu on ebox */ g_signal_connect (ebox, "button-press-event", G_CALLBACK (button_press), image); /* tell the clipboard manager to make the data persistent */ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); gtk_clipboard_set_can_store (clipboard, NULL, 0); } if (!gtk_widget_get_visible (window)) gtk_widget_show_all (window); else { gtk_widget_destroy (window); window = NULL; } return window; }