static void gwy_tool_init(GwyTool *tool, gpointer g_class) { GwyToolClass *klass; GtkWindow *window; gint width, height; klass = GWY_TOOL_CLASS(g_class); gwy_debug("%s", klass->title); tool->dialog = gtk_dialog_new(); gtk_dialog_set_has_separator(GTK_DIALOG(tool->dialog), FALSE); window = GTK_WINDOW(tool->dialog); gtk_window_set_title(window, gettext(klass->title)); gwy_app_add_main_accel_group(window); /* Prevent too smart window managers from making big mistakes */ gtk_window_set_position(window, GTK_WIN_POS_NONE); gtk_window_set_type_hint(window, GDK_WINDOW_TYPE_HINT_NORMAL); gtk_window_set_role(window, "tool"); /* Set the default window size first from class, * then let settings override it */ width = klass->default_width > 0 ? klass->default_width : -1; height = klass->default_height > 0 ? klass->default_height : -1; gtk_window_set_default_size(window, width, height); if (klass->prefix && g_str_has_prefix(klass->prefix, "/module")) { gchar *key; guint len; len = strlen(klass->prefix); key = g_newa(gchar, len + sizeof("/dialog")); strcpy(key, klass->prefix); strcpy(key + len, "/dialog"); gwy_app_restore_window_position(GTK_WINDOW(tool->dialog), key, TRUE); } g_signal_connect_swapped(tool->dialog, "unmap", G_CALLBACK(gwy_tool_unmap), tool); g_signal_connect(tool->dialog, "delete-event", G_CALLBACK(gwy_dialog_prevent_delete_cb), NULL); g_signal_connect_swapped(tool->dialog, "response", G_CALLBACK(gwy_tool_response), tool); }
GtkWidget* _gwy_app_file_chooser_get(GtkFileChooserAction action) { GtkDialog *dialog; GwyAppFileChooser *chooser; GtkWidget **instance; const gchar *title; switch (action) { case GTK_FILE_CHOOSER_ACTION_OPEN: instance = &instance_open; title = _("Open File"); break; case GTK_FILE_CHOOSER_ACTION_SAVE: instance = &instance_save; title = _("Save File"); break; default: g_return_val_if_reached(NULL); break; } if (*instance) return *instance; chooser = g_object_new(GWY_TYPE_APP_FILE_CHOOSER, "title", title, "action", action, NULL); *instance = GTK_WIDGET(chooser); dialog = GTK_DIALOG(chooser); g_object_add_weak_pointer(G_OBJECT(chooser), (gpointer*)instance); gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); switch (action) { case GTK_FILE_CHOOSER_ACTION_OPEN: chooser->prefix = "/app/file/load"; gtk_dialog_add_button(dialog, GTK_STOCK_OPEN, GTK_RESPONSE_OK); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(chooser), TRUE); break; case GTK_FILE_CHOOSER_ACTION_SAVE: chooser->prefix = "/app/file/save"; gtk_dialog_add_button(dialog, GTK_STOCK_SAVE, GTK_RESPONSE_OK); break; default: g_assert_not_reached(); break; } gtk_dialog_set_default_response(dialog, GTK_RESPONSE_OK); gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), TRUE); gwy_app_file_chooser_setup_filter(chooser); gwy_app_file_chooser_add_type_list(chooser); gwy_app_file_chooser_add_preview(chooser); g_signal_connect(chooser, "response", G_CALLBACK(gwy_app_file_chooser_save_position), NULL); gwy_app_restore_window_position(GTK_WINDOW(chooser), chooser->prefix, TRUE); return *instance; }
/** * gwy_app_recent_file_list_new: * * Creates document history browser. * * There should be at most one document history browser, so this function * fails if it already exists. * * Returns: The newly created document history browser window. **/ GtkWidget* gwy_app_recent_file_list_new(void) { GtkWidget *vbox, *filterbox, *buttonbox, *list, *scroll, *button; GtkTreeModelFilter *filter; GtkTreeSelection *selection; g_return_val_if_fail(gcontrols.store, gcontrols.window); g_return_val_if_fail(gcontrols.window == NULL, gcontrols.window); gcontrols.filter = gtk_tree_model_filter_new(GTK_TREE_MODEL(gcontrols.store), NULL); filter = GTK_TREE_MODEL_FILTER(gcontrols.filter); gtk_tree_model_filter_set_visible_func(filter, gwy_app_recent_file_list_filter, &gcontrols, NULL); gcontrols.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(gcontrols.window), _("Document History")); gtk_window_set_default_size(GTK_WINDOW(gcontrols.window), 400, 3*gdk_screen_height()/4); gwy_app_restore_window_position(GTK_WINDOW(gcontrols.window), "/app/document-history", FALSE); gwy_help_add_to_window(GTK_WINDOW(gcontrols.window), "managing-files", "document-history", GWY_HELP_DEFAULT); g_signal_connect(gcontrols.window, "unmap", G_CALLBACK(gwy_app_recent_file_list_unmapped), NULL); vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(gcontrols.window), vbox); scroll = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_box_pack_start(GTK_BOX(vbox), scroll, TRUE, TRUE, 0); list = gwy_app_recent_file_list_construct(&gcontrols); gtk_container_add(GTK_CONTAINER(scroll), list); g_object_unref(gcontrols.filter); filterbox = gwy_app_recent_file_list_filter_construct(&gcontrols); gtk_box_pack_start(GTK_BOX(vbox), filterbox, FALSE, FALSE, 0); buttonbox = gtk_hbox_new(TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(buttonbox), 2); gtk_box_pack_start(GTK_BOX(vbox), buttonbox, FALSE, FALSE, 0); gcontrols.prune = gwy_stock_like_button_new(_("_Prune"), GTK_STOCK_FIND); gtk_box_pack_start(GTK_BOX(buttonbox), gcontrols.prune, TRUE, TRUE, 0); gtk_tooltips_set_tip(gwy_app_get_tooltips(), gcontrols.prune, _("Remove entries of files that no longer exist"), NULL); g_signal_connect_swapped(gcontrols.prune, "clicked", G_CALLBACK(gwy_app_recent_file_list_prune), &gcontrols); button = gtk_button_new_from_stock(GTK_STOCK_CLOSE); gtk_box_pack_start(GTK_BOX(buttonbox), button, TRUE, TRUE, 0); gtk_tooltips_set_tip(gwy_app_get_tooltips(), button, _("Close file list"), NULL); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_widget_destroy), gcontrols.window); gcontrols.open = gtk_button_new_from_stock(GTK_STOCK_OPEN); gtk_box_pack_start(GTK_BOX(buttonbox), gcontrols.open, TRUE, TRUE, 0); gtk_tooltips_set_tip(gwy_app_get_tooltips(), gcontrols.open, _("Open selected file"), NULL); g_signal_connect_swapped(gcontrols.open, "clicked", G_CALLBACK(gwy_app_recent_file_list_open), list); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); gtk_widget_set_sensitive(gcontrols.open, gtk_tree_selection_get_selected(selection, NULL, NULL)); g_signal_connect_swapped(gcontrols.window, "destroy", G_CALLBACK(gwy_app_recent_file_list_destroyed), &gcontrols); gwy_app_recent_file_list_filter_apply(GTK_ENTRY(gcontrols.filter_glob), &gcontrols); gtk_widget_show_all(vbox); return gcontrols.window; }