/** * gimp_grid_attach_aligned: * @grid: The #GtkGrid the widgets will be attached to. * @left: The column to start with. * @top: The row to attach the widgets. * @label_text: The text for the #GtkLabel which will be attached left of * the widget. * @xalign: The horizontal alignment of the #GtkLabel. * @yalign: The vertical alignment of the #GtkLabel. * @widget: The #GtkWidget to attach right of the label. * @columns: The number of columns the widget will use. * * Note that the @label_text can be %NULL and that the widget will be * attached starting at (@column + 1) in this case, too. * * Returns: The created #GtkLabel. **/ GtkWidget * gimp_grid_attach_aligned (GtkGrid *grid, gint left, gint top, const gchar *label_text, gfloat xalign, gfloat yalign, GtkWidget *widget, gint columns) { GtkWidget *label = NULL; if (label_text) { GtkWidget *mnemonic_widget; label = gtk_label_new_with_mnemonic (label_text); gtk_label_set_xalign (GTK_LABEL (label), xalign); gtk_label_set_yalign (GTK_LABEL (label), yalign); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_grid_attach (grid, label, left, top, 1, 1); gtk_widget_show (label); mnemonic_widget = find_mnemonic_widget (widget, 0); if (mnemonic_widget) gtk_label_set_mnemonic_widget (GTK_LABEL (label), mnemonic_widget); } gtk_widget_set_hexpand (widget, TRUE); gtk_grid_attach (grid, widget, left + 1, top, columns, 1); gtk_widget_show (widget); return label; }
void GtkLabel_::set_yalign(Php::Parameters ¶meters) { double d_yalign = parameters[0]; gfloat yalign = (float)d_yalign; gtk_label_set_yalign (GTK_LABEL(instance), yalign); }
/********************************************************************\ * Sets the alignament of a Label Widget, GTK3 version specific. * * * * Args: widget - the label widget to set alignment on * * xalign - x alignment * * yalign - y alignment * * Returns: nothing * \********************************************************************/ void gnc_label_set_alignment (GtkWidget *widget, gfloat xalign, gfloat yalign) { #if GTK_CHECK_VERSION(3,16,0) gtk_label_set_xalign (GTK_LABEL (widget), xalign); gtk_label_set_yalign (GTK_LABEL (widget), yalign); #else gtk_misc_set_alignment (GTK_MISC (widget), xalign, yalign); #endif }
/** * gimp_table_attach_aligned: * @table: The #GtkTable the widgets will be attached to. * @column: The column to start with. * @row: The row to attach the widgets. * @label_text: The text for the #GtkLabel which will be attached left of * the widget. * @xalign: The horizontal alignment of the #GtkLabel. * @yalign: The vertical alignment of the #GtkLabel. * @widget: The #GtkWidget to attach right of the label. * @colspan: The number of columns the widget will use. * @left_align: %TRUE if the widget should be left-aligned. * * Note that the @label_text can be %NULL and that the widget will be * attached starting at (@column + 1) in this case, too. * * Returns: The created #GtkLabel. **/ GtkWidget * gimp_table_attach_aligned (GtkTable *table, gint column, gint row, const gchar *label_text, gfloat xalign, gfloat yalign, GtkWidget *widget, gint colspan, gboolean left_align) { GtkWidget *label = NULL; if (label_text) { GtkWidget *mnemonic_widget; label = gtk_label_new_with_mnemonic (label_text); gtk_label_set_xalign (GTK_LABEL (label), xalign); gtk_label_set_yalign (GTK_LABEL (label), yalign); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_table_attach (table, label, column, column + 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (label); mnemonic_widget = find_mnemonic_widget (widget, 0); if (mnemonic_widget) gtk_label_set_mnemonic_widget (GTK_LABEL (label), mnemonic_widget); } if (left_align) { GtkWidget *hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0); gtk_widget_show (widget); widget = hbox; } gtk_table_attach (table, widget, column + 1, column + 1 + colspan, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (widget); return label; }
static WidgetInfo * create_frame (void) { GtkWidget *frame; GtkWidget *content; frame = gimp_frame_new ("Frame"); content = gtk_label_new ("Frame Content\nThis Frame is HIG compliant"); gtk_label_set_xalign (GTK_LABEL (content), 0.0); gtk_label_set_yalign (GTK_LABEL (content), 0.0); gtk_container_add (GTK_CONTAINER (frame), content); return new_widget_info ("gimp-widget-frame", frame, MEDIUM); }
static void set_item_text_angle_and_alignment(GtkWidget* item, double text_angle, float xalign, float yalign) { GtkWidget *label; label = gtk_bin_get_child (GTK_BIN (item)); gtk_label_set_angle (GTK_LABEL (label), text_angle); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), xalign); gtk_label_set_yalign (GTK_LABEL (label), yalign); #else gtk_misc_set_alignment (GTK_MISC (label), xalign, yalign); #endif }
void setup_menuitem (GtkWidget *menuitem, GtkIconSize icon_size, GtkWidget *image, const char *title) { GtkWidget *label; char *_title; /* this creates a label with an invisible mnemonic */ label = g_object_new (GTK_TYPE_ACCEL_LABEL, NULL); _title = menu_escape_underscores_and_prepend (title); gtk_label_set_text_with_mnemonic (GTK_LABEL (label), _title); g_free (_title); gtk_label_set_pattern (GTK_LABEL (label), ""); gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menuitem); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_widget_show (label); gtk_container_add (GTK_CONTAINER (menuitem), label); if (image) { gint icon_height = PANEL_DEFAULT_MENU_ICON_SIZE; gtk_icon_size_lookup (icon_size, NULL, &icon_height); gtk_widget_show (image); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image); gtk_image_set_pixel_size (GTK_IMAGE(image), icon_height); } gtk_widget_show (menuitem); }
GtkWidget* title_label_new (const char* title) { GtkWidget *widget; gchar *str; str = g_strdup_printf ("<b>%s</b>", _(title)); widget = gtk_label_new (str); g_free (str); gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (widget), 0.0); gtk_label_set_yalign (GTK_LABEL (widget), 0.0); #else gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.0); #endif return widget; }
char * _gtk_request_dialog_run (GtkWindow *parent, GtkDialogFlags flags, const char *title, const char *message, const char *default_value, int max_length, const gchar *no_button_text, const gchar *yes_button_text) { GtkWidget *dialog; GtkWidget *label; GtkWidget *image; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *entry; GtkWidget *button; GtkWidget *content_area; char *result; dialog = gtk_dialog_new_with_buttons (title, parent, flags, NULL, NULL); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); /* Add label and image */ image = gtk_image_new_from_icon_name ("dialog-question", GTK_ICON_SIZE_DIALOG); gtk_widget_set_halign (image, GTK_ALIGN_CENTER); gtk_widget_set_valign (image, GTK_ALIGN_START); label = gtk_label_new_with_mnemonic (message); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_label_set_selectable (GTK_LABEL (label), FALSE); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.0); entry = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (entry), 50); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); gtk_entry_set_max_length (GTK_ENTRY (entry), max_length); gtk_entry_set_text (GTK_ENTRY (entry), default_value); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); gtk_box_set_spacing (GTK_BOX (content_area), 14); /* 14 + 2 * 5 = 24 */ gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); gtk_box_set_spacing (GTK_BOX (vbox), 6); gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (content_area), hbox, FALSE, FALSE, 0); gtk_widget_show_all (hbox); /* Add buttons */ button = create_button ("gtk-cancel", no_button_text); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_CANCEL); button = create_button ("gtk-ok", yes_button_text); gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_YES); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_YES); /* Run dialog */ gtk_widget_grab_focus (entry); if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) result = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); else result = NULL; gtk_widget_destroy (dialog); return result; }
GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* win; GtkWidget* main_vbox; GtkWidget* vbox; GtkWidget* close_button; GtkWidget* image; GtkWidget* alignment; AtkObject* atkobj; WindowData* windata; GdkVisual *visual; GdkScreen* screen; windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW(win), FALSE); gtk_widget_set_app_paintable(win, TRUE); g_signal_connect(G_OBJECT(win), "style-updated", G_CALLBACK(on_style_updated), windata); g_signal_connect(G_OBJECT(win), "map-event", G_CALLBACK(on_window_map), windata); g_signal_connect(G_OBJECT(win), "draw", G_CALLBACK(on_draw), windata); g_signal_connect(G_OBJECT(win), "realize", G_CALLBACK(on_window_realize), windata); windata->win = win; windata->composited = FALSE; screen = gtk_window_get_screen(GTK_WINDOW(win)); visual = gdk_screen_get_rgba_visual(screen); if (visual != NULL) { gtk_widget_set_visual(win, visual); if (gdk_screen_is_composited(screen)) { windata->composited = TRUE; } } g_signal_connect(win, "composited-changed", G_CALLBACK(on_composited_changed), windata); gtk_window_set_title(GTK_WINDOW(win), "Notification"); gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_NOTIFICATION); gtk_widget_add_events(win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); g_object_set_data_full(G_OBJECT(win), "windata", windata, (GDestroyNotify) destroy_windata); atk_object_set_role(gtk_widget_get_accessible(win), ATK_ROLE_ALERT); g_signal_connect(G_OBJECT(win), "configure-event", G_CALLBACK(on_configure_event), windata); main_vbox = gtk_vbox_new(FALSE, 0); #if GTK_CHECK_VERSION (3, 0, 0) g_signal_connect(G_OBJECT(main_vbox), "style-updated", G_CALLBACK(on_style_updated), windata); #else g_signal_connect(G_OBJECT(main_vbox), "style-set", G_CALLBACK(on_style_set), windata); #endif gtk_widget_show(main_vbox); gtk_container_add(GTK_CONTAINER(win), main_vbox); gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 12); windata->main_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(windata->main_hbox); gtk_box_pack_start(GTK_BOX(main_vbox), windata->main_hbox, FALSE, FALSE, 0); /* First row (icon, vbox, close) */ windata->iconbox = gtk_alignment_new(0.5, 0, 0, 0); gtk_widget_show(windata->iconbox); gtk_alignment_set_padding(GTK_ALIGNMENT(windata->iconbox), 5, 0, 0, 0); gtk_box_pack_start(GTK_BOX(windata->main_hbox), windata->iconbox, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->iconbox, BODY_X_OFFSET, -1); windata->icon = gtk_image_new(); gtk_widget_show(windata->icon); gtk_container_add(GTK_CONTAINER(windata->iconbox), windata->icon); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(windata->main_hbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); /* Add the close button */ alignment = gtk_alignment_new(0.5, 0, 0, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(windata->main_hbox), alignment, FALSE, FALSE, 0); close_button = gtk_button_new(); gtk_widget_show(close_button); windata->close_button = close_button; gtk_container_add(GTK_CONTAINER(alignment), close_button); gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); atkobj = gtk_widget_get_accessible(close_button); atk_action_set_description(ATK_ACTION(atkobj), 0, "Closes the notification."); atk_object_set_name(atkobj, ""); atk_object_set_description(atkobj, "Closes the notification."); image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU); gtk_widget_show(image); gtk_container_add(GTK_CONTAINER(close_button), image); /* center vbox */ windata->summary_label = gtk_label_new(NULL); gtk_widget_show(windata->summary_label); gtk_box_pack_start(GTK_BOX(vbox), windata->summary_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (windata->summary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->summary_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->summary_label), 0.0, 0.0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->summary_label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (windata->summary_label), PANGO_WRAP_WORD_CHAR); atkobj = gtk_widget_get_accessible(windata->summary_label); atk_object_set_description(atkobj, "Notification summary text."); windata->content_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(windata->content_hbox); gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(windata->content_hbox), vbox, TRUE, TRUE, 0); windata->body_label = gtk_label_new(NULL); gtk_widget_show(windata->body_label); gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (windata->body_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->body_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0.0, 0.0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (windata->body_label), PANGO_WRAP_WORD_CHAR); gtk_label_set_max_width_chars (GTK_LABEL (windata->body_label), 50); g_signal_connect_swapped(G_OBJECT(windata->body_label), "activate-link", G_CALLBACK(windata->url_clicked), win); atkobj = gtk_widget_get_accessible(windata->body_label); atk_object_set_description(atkobj, "Notification body text."); alignment = gtk_alignment_new(1, 0.5, 0, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, TRUE, 0); windata->actions_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(windata->actions_box); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
void add_notification_action(GtkWindow* nw, const char* text, const char* key, ActionInvokedCb cb) { WindowData* windata = g_object_get_data(G_OBJECT(nw), "windata"); GtkWidget* label; GtkWidget* button; GtkWidget* hbox; GdkPixbuf* pixbuf; char* buf; g_assert(windata != NULL); if (!gtk_widget_get_visible(windata->actions_box)) { GtkWidget* alignment; gtk_widget_show(windata->actions_box); update_content_hbox_visibility(windata); alignment = gtk_alignment_new(1, 0.5, 0, 0); gtk_widget_show(alignment); gtk_box_pack_end(GTK_BOX(windata->actions_box), alignment, FALSE, TRUE, 0); windata->pie_countdown = gtk_drawing_area_new(); gtk_widget_show(windata->pie_countdown); gtk_container_add(GTK_CONTAINER(alignment), windata->pie_countdown); gtk_widget_set_size_request(windata->pie_countdown, PIE_WIDTH, PIE_HEIGHT); g_signal_connect(G_OBJECT(windata->pie_countdown), "draw", G_CALLBACK(on_countdown_draw), windata); } button = gtk_button_new(); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(windata->actions_box), button, FALSE, FALSE, 0); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(button), 0); hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(hbox); gtk_container_add(GTK_CONTAINER(button), hbox); /* Try to be smart and find a suitable icon. */ buf = g_strdup_printf("stock_%s", key); pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_for_screen(gdk_window_get_screen(gtk_widget_get_window(GTK_WIDGET(nw)))), buf, 16, GTK_ICON_LOOKUP_USE_BUILTIN, NULL); g_free(buf); if (pixbuf != NULL) { GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf); gtk_widget_show(image); gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); gtk_widget_set_halign (image, GTK_ALIGN_CENTER); gtk_widget_set_valign (image, GTK_ALIGN_CENTER); } label = gtk_label_new(NULL); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); #endif buf = g_strdup_printf("<small>%s</small>", text); gtk_label_set_markup(GTK_LABEL(label), buf); g_free(buf); g_object_set_data(G_OBJECT(button), "_nw", nw); g_object_set_data_full(G_OBJECT(button), "_action_key", g_strdup(key), g_free); g_signal_connect(G_OBJECT(button), "button-release-event", G_CALLBACK(on_action_clicked), cb); }
static void gimp_dynamics_editor_constructed (GObject *object) { GimpDataEditor *data_editor = GIMP_DATA_EDITOR (object); GimpDynamicsEditor *editor = GIMP_DYNAMICS_EDITOR (object); GimpDynamics *dynamics = editor->dynamics_model; GtkWidget *input_labels[7]; GtkWidget *vbox; GtkWidget *icon_box; GtkWidget *grid; gint n_inputs = G_N_ELEMENTS (input_labels); gint i; G_OBJECT_CLASS (parent_class)->constructed (object); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_notebook_append_page (GTK_NOTEBOOK (editor->notebook), vbox, NULL); gtk_widget_show (vbox); icon_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_box_pack_start (GTK_BOX (vbox), icon_box, FALSE, FALSE, 0); gtk_widget_show (icon_box); gimp_dynamics_editor_add_icon_editor (dynamics, data_editor->context->gimp, vbox); grid = gtk_grid_new (); gtk_box_pack_start (GTK_BOX (vbox), grid, FALSE, FALSE, 0); gtk_widget_show (grid); gimp_dynamics_editor_init_output_editors (dynamics, editor->view_selector, editor->notebook, grid); input_labels[0] = gtk_label_new (_("Pressure")); input_labels[1] = gtk_label_new (_("Velocity")); input_labels[2] = gtk_label_new (_("Direction")); input_labels[3] = gtk_label_new (_("Tilt")); input_labels[4] = gtk_label_new (_("Wheel/Rotation")); input_labels[5] = gtk_label_new (_("Random")); input_labels[6] = gtk_label_new (_("Fade")); for (i = 0; i < n_inputs; i++) { gtk_label_set_angle (GTK_LABEL (input_labels[i]), 90); gtk_label_set_yalign (GTK_LABEL (input_labels[i]), 1.0); gtk_grid_attach (GTK_GRID (grid), input_labels[i], i + 1, 0, 1, 1); gtk_widget_show (input_labels[i]); } gimp_int_combo_box_prepend (GIMP_INT_COMBO_BOX (editor->view_selector), GIMP_INT_STORE_VALUE, -1, GIMP_INT_STORE_LABEL, _("Mapping matrix"), GIMP_INT_STORE_USER_DATA, vbox, -1); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (editor->view_selector), -1); gimp_docked_set_show_button_bar (GIMP_DOCKED (object), FALSE); }
static void trash_empty_start () { GtkWidget *vbox1, *vbox2, *hbox; GtkWidget *label1, *label3; gchar *markup; GCancellable *cancellable; trash_empty_dialog = gtk_dialog_new (); gtk_window_set_default_size (GTK_WINDOW (trash_empty_dialog), 400, -1); gtk_window_set_icon_name (GTK_WINDOW (trash_empty_dialog), "user-trash"); gtk_window_set_title (GTK_WINDOW (trash_empty_dialog), _("Emptying the trash")); vbox1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); label1 = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (label1), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label1), 0.0); gtk_label_set_yalign (GTK_LABEL (label1), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.5); #endif label3 = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (label3), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label3), 0.0); gtk_label_set_yalign (GTK_LABEL (label3), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label3), 0.0, 0.5); #endif gtk_widget_hide (label3); location_label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (location_label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (location_label), 0.0); gtk_label_set_yalign (GTK_LABEL (location_label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (location_label), 0.0, 0.5); #endif file_label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (file_label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (file_label), 0.0); gtk_label_set_yalign (GTK_LABEL (file_label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (file_label), 0.0, 0.5); #endif progressbar = gtk_progress_bar_new (); gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (progressbar), 0.1); gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar), _("Preparing to empty trash…")); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (trash_empty_dialog))), vbox1, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox1), label1, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), label3, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (hbox), location_label, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox1), hbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox2), progressbar, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox2), file_label, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox1), vbox2, TRUE, TRUE, 0); gtk_widget_show (label1); gtk_widget_show (vbox1); gtk_widget_show_all (vbox2); gtk_widget_show (hbox); gtk_widget_show (location_label); gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (trash_empty_dialog))), 6); gtk_container_set_border_width (GTK_CONTAINER (vbox1), 6); gtk_dialog_add_button (GTK_DIALOG (trash_empty_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); markup = g_markup_printf_escaped ("<big><b>%s</b></big>", _("Emptying the trash")); gtk_label_set_markup (GTK_LABEL (label1), markup); /* Translators: "Emptying trash from <device>" */ gtk_label_set_text (GTK_LABEL (label3), _("From: ")); cancellable = g_cancellable_new (); g_signal_connect_object (trash_empty_dialog, "response", G_CALLBACK (g_cancellable_cancel), cancellable, G_CONNECT_SWAPPED); g_io_scheduler_push_job (trash_empty_job, NULL, NULL, 0, cancellable); gtk_widget_show (trash_empty_dialog); g_free (markup); g_object_unref (cancellable); }
static PanelAddtoDialog * panel_addto_dialog_new (PanelWidget *panel_widget) { PanelAddtoDialog *dialog; GtkWidget *dialog_vbox; GtkWidget *inner_vbox; GtkWidget *find_hbox; GtkWidget *sw; GtkCellRenderer *renderer; GtkTreeSelection *selection; GtkTreeViewColumn *column; dialog = g_new0 (PanelAddtoDialog, 1); g_object_set_qdata_full (G_OBJECT (panel_widget->toplevel), panel_addto_dialog_quark, dialog, (GDestroyNotify) panel_addto_dialog_free); dialog->panel_widget = panel_widget; g_signal_connect (dialog->panel_widget->toplevel->settings, "changed::" PANEL_TOPLEVEL_NAME_KEY, G_CALLBACK (panel_addto_name_notify), dialog); dialog->addto_dialog = gtk_dialog_new (); gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog), GTK_STOCK_HELP, GTK_RESPONSE_HELP); dialog->back_button = gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog), GTK_STOCK_GO_BACK, PANEL_ADDTO_RESPONSE_BACK); dialog->add_button = gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog), GTK_STOCK_ADD, PANEL_ADDTO_RESPONSE_ADD); gtk_dialog_add_button (GTK_DIALOG (dialog->addto_dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); gtk_widget_set_sensitive (GTK_WIDGET (dialog->add_button), FALSE); gtk_dialog_set_default_response (GTK_DIALOG (dialog->addto_dialog), PANEL_ADDTO_RESPONSE_ADD); gtk_container_set_border_width (GTK_CONTAINER (dialog->addto_dialog), 5); dialog_vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog->addto_dialog)); gtk_box_set_spacing (GTK_BOX (dialog_vbox), 12); gtk_container_set_border_width (GTK_CONTAINER (dialog_vbox), 5); g_signal_connect (G_OBJECT (dialog->addto_dialog), "response", G_CALLBACK (panel_addto_dialog_response), dialog); g_signal_connect (dialog->addto_dialog, "destroy", G_CALLBACK (panel_addto_dialog_destroy), dialog); inner_vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (dialog_vbox), inner_vbox, TRUE, TRUE, 0); find_hbox = gtk_hbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (inner_vbox), find_hbox, FALSE, FALSE, 0); dialog->label = gtk_label_new_with_mnemonic (""); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (dialog->label), 0.0); gtk_label_set_yalign (GTK_LABEL (dialog->label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (dialog->label), 0.0, 0.5); #endif gtk_label_set_use_markup (GTK_LABEL (dialog->label), TRUE); gtk_box_pack_start (GTK_BOX (find_hbox), dialog->label, FALSE, FALSE, 0); dialog->search_entry = gtk_entry_new (); g_signal_connect (G_OBJECT (dialog->search_entry), "changed", G_CALLBACK (panel_addto_search_entry_changed), dialog); g_signal_connect (G_OBJECT (dialog->search_entry), "activate", G_CALLBACK (panel_addto_search_entry_activated), dialog); gtk_box_pack_end (GTK_BOX (find_hbox), dialog->search_entry, TRUE, TRUE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->label), dialog->search_entry); sw = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (inner_vbox), sw, TRUE, TRUE, 0); dialog->tree_view = gtk_tree_view_new (); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->tree_view), FALSE); gtk_tree_view_expand_all (GTK_TREE_VIEW (dialog->tree_view)); renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, "xpad", 4, "ypad", 4, "stock-size", panel_add_to_icon_get_size(), NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view), -1, NULL, renderer, "icon_name", COLUMN_ICON_NAME, NULL); renderer = gtk_cell_renderer_text_new (); g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (dialog->tree_view), -1, NULL, renderer, "markup", COLUMN_TEXT, NULL); //FIXME use the same search than the one for the search entry? gtk_tree_view_set_search_column (GTK_TREE_VIEW (dialog->tree_view), COLUMN_SEARCH); gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (dialog->tree_view), panel_addto_separator_func, GINT_TO_POINTER (COLUMN_TEXT), NULL); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->tree_view)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->tree_view), COLUMN_TEXT); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); g_signal_connect (selection, "changed", G_CALLBACK (panel_addto_selection_changed), dialog); g_signal_connect (dialog->tree_view, "row-activated", G_CALLBACK (panel_addto_selection_activated), dialog); gtk_container_add (GTK_CONTAINER (sw), dialog->tree_view); gtk_widget_show_all (dialog_vbox); panel_toplevel_push_autohide_disabler (dialog->panel_widget->toplevel); panel_widget_register_open_dialog (panel_widget, dialog->addto_dialog); panel_addto_name_change (dialog, panel_toplevel_get_name (dialog->panel_widget->toplevel)); return dialog; }
int main (int argc, char **argv) { GdkScreen *screen; GtkWidget *nb; GtkWidget *general_vbox; GtkWidget *behaviour_vbox; GtkWidget *placement_vbox; GtkWidget *widget; GtkWidget *vbox; GtkWidget *vbox1; GtkWidget *hbox; GtkWidget *hbox1; GtkWidget *hbox2; GtkWidget *hbox3; GtkWidget *content_area; gchar *str; const char *current_wm; int i; bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); gtk_init (&argc, &argv); screen = gdk_display_get_default_screen (gdk_display_get_default ()); current_wm = gdk_x11_screen_get_window_manager_name (screen); if (g_strcmp0 (current_wm, WM_COMMON_METACITY) == 0) { mate_metacity_config_tool (); return 0; } if (g_strcmp0 (current_wm, WM_COMMON_MARCO) != 0) { wm_unsupported (); return 1; } marco_settings = g_settings_new (MARCO_SCHEMA); /* Window */ dialog_win = gtk_dialog_new_with_buttons (_("Window Preferences"), NULL, GTK_DIALOG_MODAL, #if GTK_CHECK_VERSION (3, 10, 0) _("_Help"), #else GTK_STOCK_HELP, #endif GTK_RESPONSE_HELP, #if GTK_CHECK_VERSION (3, 10, 0) _("_Close"), #else GTK_STOCK_CLOSE, #endif GTK_RESPONSE_CLOSE, NULL); //gtk_window_set_resizable (GTK_WINDOW (dialog_win), FALSE); gtk_window_set_icon_name (GTK_WINDOW (dialog_win), "preferences-system-windows"); gtk_container_set_border_width (GTK_CONTAINER (dialog_win), 10); nb = gtk_notebook_new (); general_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); behaviour_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); placement_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); widget = gtk_label_new (_("General")); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), general_vbox, FALSE, FALSE, 6); gtk_notebook_append_page (GTK_NOTEBOOK (nb), hbox, widget); widget = gtk_label_new (_("Behaviour")); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), behaviour_vbox, FALSE, FALSE, 6); gtk_notebook_append_page (GTK_NOTEBOOK (nb), hbox, widget); widget = gtk_label_new (_("Placement")); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_box_pack_start (GTK_BOX (hbox), placement_vbox, FALSE, FALSE, 6); gtk_notebook_append_page (GTK_NOTEBOOK (nb), hbox, widget); /* Compositing manager */ widget = title_label_new (N_("Compositing Manager")); gtk_box_pack_start (GTK_BOX (general_vbox), widget, FALSE, FALSE, 6); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); compositing_checkbutton = gtk_check_button_new_with_mnemonic (_("Enable software _compositing window manager")); compositing_fast_alt_tab_checkbutton = gtk_check_button_new_with_mnemonic (_("Disable _thumbnails in Alt-Tab")); gtk_box_pack_start (GTK_BOX (vbox), compositing_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox1), compositing_fast_alt_tab_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox1, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (general_vbox), hbox, FALSE, FALSE, 6); /* Titlebar buttons */ widget = title_label_new (N_("Titlebar Buttons")); gtk_box_pack_start (GTK_BOX (general_vbox), widget, FALSE, FALSE, 6); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); widget = gtk_label_new (_("Position:")); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 6); titlebar_layout_optionmenu = gtk_combo_box_text_new (); gtk_box_pack_start (GTK_BOX (hbox), titlebar_layout_optionmenu, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (general_vbox), hbox, FALSE, FALSE, 6); /* New Windows */ widget = title_label_new (N_("New Windows")); gtk_box_pack_start (GTK_BOX (placement_vbox), widget, FALSE, FALSE, 6); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); center_new_windows_checkbutton = gtk_check_button_new_with_mnemonic (_("Center _new windows")); gtk_box_pack_start (GTK_BOX (hbox), center_new_windows_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (placement_vbox), hbox, FALSE, FALSE, 6); /* Window Snapping */ widget = title_label_new (N_("Window Snapping")); gtk_box_pack_start (GTK_BOX (placement_vbox), widget, FALSE, FALSE, 6); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); side_by_side_tiling_checkbutton = gtk_check_button_new_with_mnemonic (_("Enable side by side _tiling")); gtk_box_pack_start (GTK_BOX (hbox), side_by_side_tiling_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (placement_vbox), hbox, FALSE, FALSE, 6); /* Window Selection */ widget = title_label_new (N_("Window Selection")); gtk_box_pack_start (GTK_BOX (behaviour_vbox), widget, FALSE, FALSE, 6); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); vbox1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); hbox1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); hbox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); hbox3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); focus_mode_checkbutton = gtk_check_button_new_with_mnemonic (_("_Select windows when the mouse moves over them")); gtk_box_pack_start (GTK_BOX (vbox), focus_mode_checkbutton, FALSE, FALSE, 6); focus_mode_mouse_checkbutton = gtk_check_button_new_with_mnemonic (_("U_nselect windows when the mouse leaves them")); gtk_box_pack_start (GTK_BOX (hbox1), focus_mode_mouse_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 6); autoraise_checkbutton = gtk_check_button_new_with_mnemonic (_("_Raise selected windows after an interval")); gtk_box_pack_start (GTK_BOX (hbox2), autoraise_checkbutton, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox1), hbox2, FALSE, FALSE, 6); autoraise_delay_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); autoraise_delay_slider = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, 10, 0.2); widget = gtk_label_new_with_mnemonic (_("_Interval before raising:")); gtk_box_pack_start (GTK_BOX (autoraise_delay_hbox), widget, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (autoraise_delay_hbox), autoraise_delay_slider, TRUE, TRUE, 6); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), autoraise_delay_slider); widget = gtk_label_new (_("seconds")); gtk_range_set_increments (GTK_RANGE (autoraise_delay_slider), 0.2, 1.0); gtk_box_pack_start (GTK_BOX (autoraise_delay_hbox), widget, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox1), autoraise_delay_hbox, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox3), vbox1, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), hbox3, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (behaviour_vbox), hbox, FALSE, FALSE, 6); /* Titlebar Action */ widget = title_label_new (N_("Titlebar Action")); gtk_box_pack_start (GTK_BOX (behaviour_vbox), widget, FALSE, FALSE, 6); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); widget = gtk_label_new_with_mnemonic (_("_Double-click titlebar to perform this action:")); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 6); double_click_titlebar_optionmenu = gtk_combo_box_text_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), double_click_titlebar_optionmenu); gtk_box_pack_start (GTK_BOX (hbox), double_click_titlebar_optionmenu, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (behaviour_vbox), hbox, FALSE, FALSE, 6); /* Movement Key */ widget = title_label_new (N_("Movement Key")); gtk_box_pack_start (GTK_BOX (behaviour_vbox), widget, FALSE, FALSE, 6); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); widget = gtk_label_new_with_mnemonic (_("To move a window, press-and-hold this key then grab the window:")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (widget), 0.0); gtk_label_set_yalign (GTK_LABEL (widget), 0.0); #else gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.0); #endif gtk_box_pack_start (GTK_BOX (vbox), widget, FALSE, FALSE, 6); alt_click_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_label_set_mnemonic_widget (GTK_LABEL (widget), alt_click_vbox); gtk_box_pack_start (GTK_BOX (vbox), alt_click_vbox, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 6); gtk_box_pack_start (GTK_BOX (behaviour_vbox), hbox, FALSE, FALSE, 6); reload_mouse_modifiers (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (titlebar_layout_optionmenu), _("Right")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (titlebar_layout_optionmenu), _("Left")); str = g_settings_get_string (marco_settings, MARCO_BUTTON_LAYOUT_KEY); gtk_combo_box_set_active (GTK_COMBO_BOX (titlebar_layout_optionmenu), g_strcmp0 (str, MARCO_BUTTON_LAYOUT_RIGHT) == 0 ? 0 : 1); g_free (str); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("Roll up")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("Maximize")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("Maximize Horizontally")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("Maximize Vertically")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("Minimize")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (double_click_titlebar_optionmenu), _("None")); gtk_combo_box_set_active (GTK_COMBO_BOX (double_click_titlebar_optionmenu), g_settings_get_enum (marco_settings, MARCO_DOUBLE_CLICK_TITLEBAR_KEY)); set_alt_click_value (); gtk_range_set_value (GTK_RANGE (autoraise_delay_slider), g_settings_get_int (marco_settings, MARCO_AUTORAISE_DELAY_KEY) / 1000.0); gtk_combo_box_set_active (GTK_COMBO_BOX (double_click_titlebar_optionmenu), g_settings_get_enum (marco_settings, MARCO_DOUBLE_CLICK_TITLEBAR_KEY)); g_signal_connect (G_OBJECT (dialog_win), "response", G_CALLBACK (response_cb), NULL); g_signal_connect (G_OBJECT (dialog_win), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_signal_connect (marco_settings, "changed", G_CALLBACK (marco_settings_changed_callback), NULL); g_settings_bind (marco_settings, MARCO_COMPOSITING_MANAGER_KEY, compositing_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (marco_settings, MARCO_COMPOSITING_FAST_ALT_TAB_KEY, compositing_fast_alt_tab_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (marco_settings, MARCO_SIDE_BY_SIDE_TILING_KEY, side_by_side_tiling_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_settings_bind (marco_settings, MARCO_CENTER_NEW_WINDOWS_KEY, center_new_windows_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_signal_connect (marco_settings, "changed::" MARCO_FOCUS_KEY, G_CALLBACK (mouse_focus_changed_callback), NULL); /* Initialize the checkbox state appropriately */ mouse_focus_changed_callback(marco_settings, MARCO_FOCUS_KEY, NULL); g_signal_connect (focus_mode_checkbutton, "toggled", G_CALLBACK (mouse_focus_toggled_callback), NULL); g_signal_connect (focus_mode_mouse_checkbutton, "toggled", G_CALLBACK (mouse_focus_toggled_callback), NULL); g_settings_bind (marco_settings, MARCO_AUTORAISE_KEY, autoraise_checkbutton, "active", G_SETTINGS_BIND_DEFAULT); g_signal_connect (autoraise_delay_slider, "value_changed", G_CALLBACK (autoraise_delay_value_changed_callback), NULL); g_signal_connect (double_click_titlebar_optionmenu, "changed", G_CALLBACK (double_click_titlebar_changed_callback), NULL); g_signal_connect (titlebar_layout_optionmenu, "changed", G_CALLBACK (titlebar_layout_changed_callback), NULL); g_signal_connect (G_OBJECT (screen), "window_manager_changed", G_CALLBACK (wm_changed_callback), NULL); i = 0; while (i < n_mouse_modifiers) { g_signal_connect (G_OBJECT (mouse_modifiers[i].radio), "toggled", G_CALLBACK (alt_click_radio_toggled_callback), &mouse_modifiers[i]); ++i; } /* update sensitivity */ update_sensitivity (); capplet_set_icon (dialog_win, "preferences-system-windows"); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog_win)); gtk_box_pack_start (GTK_BOX (content_area), nb, TRUE, TRUE, 0); gtk_widget_show_all (dialog_win); gtk_main (); g_object_unref (marco_settings); return 0; }
GtkWidget* _gtk_error_dialog_new (GtkWindow *parent, GtkDialogFlags flags, GList *row_output, const char *primary_text, const char *secondary_text, ...) { GtkWidget *dialog; GtkWidget *label; GtkWidget *image; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *text_view; GtkWidget *scrolled = NULL; GtkWidget *expander; GtkWidget *content_area; GtkWidget *action_area; GtkTextBuffer *text_buf; GtkTextIter iter; GList *scan; char *escaped_message, *markup_text; va_list args; gboolean view_output = (row_output != NULL); dialog = gtk_dialog_new_with_buttons ("", parent, flags, "gtk-ok", GTK_RESPONSE_OK, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); action_area = gtk_dialog_get_action_area (GTK_DIALOG (dialog)); /* Add label and image */ image = gtk_image_new_from_icon_name ("dialog-error", GTK_ICON_SIZE_DIALOG); gtk_widget_set_halign (image, GTK_ALIGN_CENTER); gtk_widget_set_valign (image, GTK_ALIGN_START); label = gtk_label_new (""); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_label_set_selectable (GTK_LABEL (label), TRUE); gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.0); escaped_message = g_markup_escape_text (primary_text, -1); if (secondary_text != NULL) { char *secondary_message; char *escaped_secondary_message; va_start (args, secondary_text); secondary_message = g_strdup_vprintf (secondary_text, args); va_end (args); escaped_secondary_message = g_markup_escape_text (secondary_message, -1); markup_text = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">%s</span>\n\n%s", escaped_message, escaped_secondary_message); g_free (escaped_secondary_message); g_free (secondary_message); } else markup_text = g_strdup (escaped_message); gtk_label_set_markup (GTK_LABEL (label), markup_text); g_free (markup_text); g_free (escaped_message); if (view_output) { gtk_widget_set_size_request (dialog, 500, -1); /* Expander */ expander = gtk_expander_new_with_mnemonic (_("Command _Line Output")); gtk_expander_set_expanded (GTK_EXPANDER (expander), secondary_text == NULL); /* Add text */ scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_ETCHED_IN); gtk_widget_set_size_request (scrolled, -1, 200); text_buf = gtk_text_buffer_new (NULL); gtk_text_buffer_create_tag (text_buf, "monospace", "family", "monospace", NULL); gtk_text_buffer_get_iter_at_offset (text_buf, &iter, 0); for (scan = row_output; scan; scan = scan->next) { char *line = scan->data; char *utf8_line; gsize bytes_written; utf8_line = g_locale_to_utf8 (line, -1, NULL, &bytes_written, NULL); gtk_text_buffer_insert_with_tags_by_name (text_buf, &iter, utf8_line, bytes_written, "monospace", NULL); g_free (utf8_line); gtk_text_buffer_insert (text_buf, &iter, "\n", 1); } text_view = gtk_text_view_new_with_buffer (text_buf); g_object_unref (text_buf); gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE); gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE); } vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); if (view_output) { gtk_container_add (GTK_CONTAINER (scrolled), text_view); gtk_container_add (GTK_CONTAINER (expander), scrolled); gtk_box_pack_start (GTK_BOX (vbox), expander, TRUE, TRUE, 0); } gtk_box_pack_start (GTK_BOX (content_area), vbox, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); gtk_box_set_spacing (GTK_BOX (content_area), 14); /* 14 + 2 * 5 = 24 */ gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); gtk_box_set_spacing (GTK_BOX (action_area), 6); gtk_widget_show_all (vbox); return dialog; }
static void create_screenshot_frame (GtkWidget *outer_vbox, const gchar *frame_title) { GtkWidget *main_vbox, *vbox, *hbox; GtkWidget *align; GtkWidget *radio; GtkWidget *image; GtkWidget *spin; GtkWidget *label; GtkAdjustment *adjust; GSList *group; gchar *title; #if GTK_CHECK_VERSION (3, 0, 0) main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); #else main_vbox = gtk_vbox_new (FALSE, 6); #endif gtk_box_pack_start (GTK_BOX (outer_vbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); title = g_strconcat ("<b>", frame_title, "</b>", NULL); label = gtk_label_new (title); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); g_free (title); #if GTK_CHECK_VERSION (3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); #else hbox = gtk_hbox_new (FALSE, 12); #endif gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); align = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); gtk_widget_set_size_request (align, 48, -1); gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0); gtk_widget_show (align); image = gtk_image_new_from_stock (SCREENSHOOTER_ICON, GTK_ICON_SIZE_DIALOG); gtk_container_add (GTK_CONTAINER (align), image); gtk_widget_show (image); #if GTK_CHECK_VERSION (3, 0, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); #else vbox = gtk_vbox_new (FALSE, 6); #endif gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); gtk_widget_show (vbox); /** Grab whole desktop **/ group = NULL; radio = gtk_radio_button_new_with_mnemonic (group, _("Grab the whole _desktop")); if (take_window_shot || take_area_shot) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), FALSE); g_signal_connect (radio, "toggled", G_CALLBACK (target_toggled_cb), GINT_TO_POINTER (TARGET_TOGGLE_DESKTOP)); gtk_box_pack_start (GTK_BOX (vbox), radio, FALSE, FALSE, 0); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); gtk_widget_show (radio); /** Grab current window **/ radio = gtk_radio_button_new_with_mnemonic (group, _("Grab the current _window")); if (take_window_shot) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); g_signal_connect (radio, "toggled", G_CALLBACK (target_toggled_cb), GINT_TO_POINTER (TARGET_TOGGLE_WINDOW)); gtk_box_pack_start (GTK_BOX (vbox), radio, FALSE, FALSE, 0); group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio)); gtk_widget_show (radio); /** Grab area of the desktop **/ radio = gtk_radio_button_new_with_mnemonic (group, _("Select _area to grab")); if (take_area_shot) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); g_signal_connect (radio, "toggled", G_CALLBACK (target_toggled_cb), GINT_TO_POINTER (TARGET_TOGGLE_AREA)); gtk_box_pack_start (GTK_BOX (vbox), radio, FALSE, FALSE, 0); gtk_widget_show (radio); /** Grab after delay **/ #if GTK_CHECK_VERSION (3, 0, 0) delay_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); #else delay_hbox = gtk_hbox_new (FALSE, 6); #endif gtk_widget_set_sensitive (delay_hbox, !take_area_shot); gtk_box_pack_start (GTK_BOX (vbox), delay_hbox, FALSE, FALSE, 0); gtk_widget_show (delay_hbox); /* translators: this is the first part of the "grab after a * delay of <spin button> seconds". */ label = gtk_label_new_with_mnemonic (_("Grab _after a delay of")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_box_pack_start (GTK_BOX (delay_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); adjust = GTK_ADJUSTMENT (gtk_adjustment_new ((gdouble) delay, 0.0, 99.0, 1.0, 1.0, 0.0)); spin = gtk_spin_button_new (adjust, 1.0, 0); g_signal_connect (spin, "value-changed", G_CALLBACK (delay_spin_value_changed_cb), NULL); gtk_box_pack_start (GTK_BOX (delay_hbox), spin, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spin); gtk_widget_show (spin); /* translators: this is the last part of the "grab after a * delay of <spin button> seconds". */ label = gtk_label_new (_("seconds")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_box_pack_end (GTK_BOX (delay_hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); }
/* Show the preferences dialog */ static void command_settings_callback (GtkAction *action, CommandApplet *command_applet) { GtkDialog *dialog; GtkGrid *grid; GtkWidget *widget; GtkWidget *command; GtkWidget *interval; GtkWidget *width; GtkWidget *showicon; dialog = GTK_DIALOG (gtk_dialog_new_with_buttons(_("Command Applet Preferences"), NULL, GTK_DIALOG_MODAL, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL)); grid = GTK_GRID (gtk_grid_new ()); gtk_grid_set_row_spacing (grid, 12); gtk_grid_set_column_spacing (grid, 12); gtk_window_set_default_size (GTK_WINDOW (dialog), 350, 150); gtk_container_set_border_width (GTK_CONTAINER (dialog), 10); widget = gtk_label_new (_("Command:")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (widget), 1.0); gtk_label_set_yalign (GTK_LABEL (widget), 0.5); #else gtk_misc_set_alignment (GTK_MISC (widget), 1.0, 0.5); #endif gtk_grid_attach (grid, widget, 1, 0, 1, 1); command = gtk_entry_new (); gtk_grid_attach (grid, command, 2, 0, 1, 1); widget = gtk_label_new (_("Interval (seconds):")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (widget), 1.0); gtk_label_set_yalign (GTK_LABEL (widget), 0.5); #else gtk_misc_set_alignment (GTK_MISC (widget), 1.0, 0.5); #endif gtk_grid_attach (grid, widget, 1, 1, 1, 1); interval = gtk_spin_button_new_with_range (1.0, 600.0, 1.0); gtk_grid_attach (grid, interval, 2, 1, 1, 1); widget = gtk_label_new (_("Maximum width (chars):")); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (widget), 1.0); gtk_label_set_yalign (GTK_LABEL (widget), 0.5); #else gtk_misc_set_alignment (GTK_MISC (widget), 1.0, 0.5); #endif gtk_grid_attach (grid, widget, 1, 2, 1, 1); width = gtk_spin_button_new_with_range(1.0, 100.0, 1.0); gtk_grid_attach (grid, width, 2, 2, 1, 1); showicon = gtk_check_button_new_with_label (_("Show icon")); gtk_grid_attach (grid, showicon, 2, 3, 1, 1); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (dialog)), GTK_WIDGET (grid), TRUE, TRUE, 0); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); /* use g_settings_bind to manage settings */ g_settings_bind (command_applet->settings, COMMAND_KEY, command, "text", G_SETTINGS_BIND_DEFAULT); g_settings_bind (command_applet->settings, INTERVAL_KEY, interval, "value", G_SETTINGS_BIND_DEFAULT); g_settings_bind (command_applet->settings, WIDTH_KEY, width, "value", G_SETTINGS_BIND_DEFAULT); g_settings_bind (command_applet->settings, SHOW_ICON_KEY, showicon, "active", G_SETTINGS_BIND_DEFAULT); gtk_widget_show_all (GTK_WIDGET (dialog)); }
GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* spacer; GtkWidget* win; GtkWidget* main_vbox; GtkWidget* hbox; GtkWidget* vbox; GtkWidget* close_button; GtkWidget* image; GtkWidget* alignment; AtkObject* atkobj; #if !GTK_CHECK_VERSION(3, 0, 0) GtkRcStyle* rcstyle; #endif WindowData* windata; #if GTK_CHECK_VERSION (3, 0, 0) GdkVisual *visual; #else GdkColormap* colormap; #endif GdkScreen* screen; windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); windata->win = win; windata->composited = FALSE; screen = gtk_window_get_screen(GTK_WINDOW(win)); #if GTK_CHECK_VERSION (3, 0, 0) visual = gdk_screen_get_rgba_visual(screen); if (visual != NULL) { gtk_widget_set_visual(win, visual); if (gdk_screen_is_composited(screen)) { windata->composited = TRUE; } } #else colormap = gdk_screen_get_rgba_colormap(screen); if (colormap != NULL && gdk_screen_is_composited(screen)) { gtk_widget_set_colormap(win, colormap); windata->composited = TRUE; } #endif gtk_window_set_title(GTK_WINDOW(win), "Notification"); gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_NOTIFICATION); gtk_widget_add_events(win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_widget_realize(win); gtk_widget_set_size_request(win, WIDTH, -1); g_object_set_data_full(G_OBJECT(win), "windata", windata, (GDestroyNotify) destroy_windata); atk_object_set_role(gtk_widget_get_accessible(win), ATK_ROLE_ALERT); g_signal_connect(G_OBJECT(win), "configure_event", G_CALLBACK(configure_event_cb), windata); main_vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_vbox); gtk_container_add (GTK_CONTAINER (win), main_vbox); gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 1); #if GTK_CHECK_VERSION (3, 0, 0) g_signal_connect (G_OBJECT (main_vbox), "draw", G_CALLBACK (on_draw), windata); #else g_signal_connect (G_OBJECT (main_vbox), "expose_event", G_CALLBACK (on_expose_event), windata); #endif windata->top_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->top_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->top_spacer, -1, DEFAULT_ARROW_HEIGHT); windata->main_hbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(windata->main_hbox); gtk_box_pack_start(GTK_BOX(main_vbox), windata->main_hbox, FALSE, FALSE, 0); windata->bottom_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->bottom_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->bottom_spacer, -1, DEFAULT_ARROW_HEIGHT); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(windata->main_hbox), vbox, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); hbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); spacer = gtk_image_new(); gtk_widget_show(spacer); gtk_box_pack_start(GTK_BOX(hbox), spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(spacer, SPACER_LEFT, -1); windata->summary_label = gtk_label_new(NULL); gtk_widget_show(windata->summary_label); gtk_box_pack_start(GTK_BOX(hbox), windata->summary_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 15, 2) gtk_label_set_xalign (GTK_LABEL (windata->summary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->summary_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->summary_label), 0, 0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->summary_label), TRUE); #if GTK_CHECK_VERSION (3, 0, 0) gtk_label_set_line_wrap_mode (GTK_LABEL (windata->summary_label), PANGO_WRAP_WORD_CHAR); #endif atkobj = gtk_widget_get_accessible(windata->summary_label); atk_object_set_description(atkobj, "Notification summary text."); /* Add the close button */ alignment = gtk_alignment_new(1, 0, 0, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(hbox), alignment, FALSE, FALSE, 0); close_button = gtk_button_new(); windata->close_button = close_button; gtk_widget_show(close_button); gtk_container_add(GTK_CONTAINER(alignment), close_button); gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); //gtk_widget_set_size_request(close_button, 20, 20); g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); #if !GTK_CHECK_VERSION(3, 0, 0) rcstyle = gtk_rc_style_new(); rcstyle->xthickness = rcstyle->ythickness = 0; gtk_widget_modify_style(close_button, rcstyle); g_object_unref(rcstyle); #endif atkobj = gtk_widget_get_accessible(close_button); atk_action_set_description(ATK_ACTION(atkobj), 0, "Closes the notification."); atk_object_set_name(atkobj, ""); atk_object_set_description(atkobj, "Closes the notification."); image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); gtk_widget_show(image); gtk_container_add(GTK_CONTAINER(close_button), image); windata->content_hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); windata->iconbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(windata->iconbox); gtk_box_pack_start(GTK_BOX(windata->content_hbox), windata->iconbox, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->iconbox, BODY_X_OFFSET, -1); windata->icon = gtk_image_new(); gtk_box_pack_start(GTK_BOX(windata->iconbox), windata->icon, TRUE, TRUE, 0); gtk_misc_set_alignment(GTK_MISC(windata->icon), 0.5, 0.0); vbox = gtk_vbox_new(FALSE, 6); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(windata->content_hbox), vbox, TRUE, TRUE, 0); windata->body_label = gtk_label_new(NULL); gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 15, 2) gtk_label_set_xalign (GTK_LABEL (windata->body_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->body_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0, 0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE); #if GTK_CHECK_VERSION (3, 0, 0) gtk_label_set_line_wrap_mode (GTK_LABEL (windata->body_label), PANGO_WRAP_WORD_CHAR); #endif g_signal_connect(G_OBJECT(windata->body_label), "activate-link", G_CALLBACK(activate_link), windata); atkobj = gtk_widget_get_accessible(windata->body_label); atk_object_set_description(atkobj, "Notification body text."); alignment = gtk_alignment_new(1, 0.5, 0, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, TRUE, 0); windata->actions_box = gtk_hbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
static GtkWidget * build_tab_label (CajaNotebook *nb, CajaWindowSlot *slot) { CajaDragSlotProxyInfo *drag_info; GtkWidget *hbox, *label, *close_button, *image, *spinner, *icon; /* set hbox spacing and label padding (see below) so that there's an * equal amount of space around the label */ hbox = gtk_hbox_new (FALSE, 4); gtk_widget_show (hbox); /* setup load feedback */ spinner = spinner = gtk_spinner_new (); gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0); /* setup site icon, empty by default */ icon = gtk_image_new (); gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); /* don't show the icon */ /* setup label */ label = gtk_label_new (NULL); gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); gtk_label_set_single_line_mode (GTK_LABEL (label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif #if GTK_CHECK_VERSION (3, 0, 0) gtk_widget_set_margin_start (label, 0); gtk_widget_set_margin_end (label, 0); gtk_widget_set_margin_top (label, 0); gtk_widget_set_margin_bottom (label, 0); #else gtk_misc_set_padding (GTK_MISC (label), 0, 0); #endif gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); gtk_widget_show (label); /* setup close button */ close_button = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); /* don't allow focus on the close button */ #if GTK_CHECK_VERSION(3,20,0) gtk_widget_set_focus_on_click (close_button, FALSE); #else gtk_button_set_focus_on_click (GTK_BUTTON (close_button), FALSE); #endif gtk_widget_set_name (close_button, "caja-tab-close-button"); image = gtk_image_new_from_icon_name ("window-close", GTK_ICON_SIZE_MENU); gtk_widget_set_tooltip_text (close_button, _("Close tab")); g_signal_connect_object (close_button, "clicked", G_CALLBACK (close_button_clicked_cb), slot, 0); gtk_container_add (GTK_CONTAINER (close_button), image); gtk_widget_show (image); gtk_box_pack_start (GTK_BOX (hbox), close_button, FALSE, FALSE, 0); gtk_widget_show (close_button); /* Set minimal size */ g_signal_connect (hbox, "style-set", G_CALLBACK (tab_label_style_set_cb), NULL); drag_info = g_new0 (CajaDragSlotProxyInfo, 1); drag_info->target_slot = slot; g_object_set_data_full (G_OBJECT (hbox), "proxy-drag-info", drag_info, (GDestroyNotify) g_free); caja_drag_slot_proxy_init (hbox, drag_info); g_object_set_data (G_OBJECT (hbox), "label", label); g_object_set_data (G_OBJECT (hbox), "spinner", spinner); g_object_set_data (G_OBJECT (hbox), "icon", icon); g_object_set_data (G_OBJECT (hbox), "close-button", close_button); return hbox; }
static void gvc_combo_box_init (GvcComboBox *combobox) { GtkWidget *frame; GtkCellRenderer *renderer; frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); combobox->priv = GVC_COMBO_BOX_GET_PRIVATE (combobox); combobox->priv->model = GTK_TREE_MODEL (gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING)); combobox->priv->combobox = gtk_combo_box_new_with_model (combobox->priv->model); combobox->priv->label = gtk_label_new (NULL); gtk_label_set_xalign (GTK_LABEL (combobox->priv->label), 0.0); gtk_label_set_yalign (GTK_LABEL (combobox->priv->label), 0.5); gtk_label_set_mnemonic_widget (GTK_LABEL (combobox->priv->label), combobox->priv->combobox); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox->priv->combobox), renderer, FALSE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (combobox->priv->combobox), renderer, "text", COL_HUMAN_NAME); combobox->priv->drop_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); combobox->priv->start_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); combobox->priv->end_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); /* Make sure the combo box does not get too long on long profile names */ g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_combo_box_set_popup_fixed_width (GTK_COMBO_BOX (combobox->priv->combobox), FALSE); gtk_box_pack_start (GTK_BOX (combobox), frame, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (combobox->priv->drop_box), combobox->priv->start_box, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (combobox->priv->start_box), combobox->priv->label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (combobox->priv->drop_box), combobox->priv->combobox, TRUE, TRUE, 0); combobox->priv->button = gtk_button_new_with_label (""); gtk_box_pack_start (GTK_BOX (combobox->priv->drop_box), combobox->priv->button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (combobox->priv->drop_box), combobox->priv->end_box, FALSE, FALSE, 0); gtk_container_add (GTK_CONTAINER (frame), combobox->priv->drop_box); g_signal_connect (G_OBJECT (combobox->priv->combobox), "changed", G_CALLBACK (on_combo_box_changed), combobox); g_signal_connect (G_OBJECT (combobox->priv->button), "clicked", G_CALLBACK (on_combo_box_button_clicked), combobox); gtk_widget_set_no_show_all (combobox->priv->button, TRUE); gtk_widget_show_all (frame); }
static GtkWidget * build_tab_label (NautilusNotebook *nb, NautilusWindowSlot *slot) { GtkWidget *hbox, *label, *close_button, *image, *spinner, *icon; GtkWidget *box; box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4); gtk_widget_show (box); /* set hbox spacing and label padding (see below) so that there's an * equal amount of space around the label */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show (hbox); gtk_widget_set_halign (hbox, GTK_ALIGN_CENTER); gtk_box_pack_start (GTK_BOX (box), hbox, TRUE, TRUE, 0); /* setup load feedback */ spinner = gtk_spinner_new (); gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0); /* setup site icon, empty by default */ icon = gtk_image_new (); gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0); /* don't show the icon */ /* setup label */ label = gtk_label_new (NULL); gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); gtk_label_set_single_line_mode (GTK_LABEL (label), TRUE); gtk_label_set_xalign (GTK_LABEL (label), 0.5); gtk_label_set_yalign (GTK_LABEL (label), 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); /* setup close button */ close_button = gtk_button_new (); gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); /* don't allow focus on the close button */ gtk_widget_set_focus_on_click (close_button, FALSE); gtk_widget_set_name (close_button, "nautilus-tab-close-button"); image = gtk_image_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_MENU); gtk_widget_set_tooltip_text (close_button, _("Close tab")); g_signal_connect_object (close_button, "clicked", G_CALLBACK (close_button_clicked_cb), slot, 0); gtk_container_add (GTK_CONTAINER (close_button), image); gtk_widget_show (image); gtk_box_pack_start (GTK_BOX (box), close_button, FALSE, FALSE, 0); gtk_widget_show (close_button); g_object_set_data (G_OBJECT (box), "nautilus-notebook-tab", GINT_TO_POINTER (1)); nautilus_drag_slot_proxy_init (box, NULL, slot); g_object_set_data (G_OBJECT (box), "label", label); g_object_set_data (G_OBJECT (box), "spinner", spinner); g_object_set_data (G_OBJECT (box), "icon", icon); g_object_set_data (G_OBJECT (box), "close-button", close_button); return box; }
static void create_effects_frame (GtkWidget *outer_vbox, const gchar *frame_title) { GtkWidget *main_vbox, *vbox, *hbox; GtkWidget *align; GtkWidget *label; GtkWidget *check; GtkWidget *combo; gchar *title; #if GTK_CHECK_VERSION (3, 0, 0) main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); #else main_vbox = gtk_vbox_new (FALSE, 6); #endif gtk_widget_set_sensitive (main_vbox, !take_area_shot); gtk_box_pack_start (GTK_BOX (outer_vbox), main_vbox, FALSE, FALSE, 0); gtk_widget_show (main_vbox); effects_vbox = main_vbox; title = g_strconcat ("<b>", frame_title, "</b>", NULL); label = gtk_label_new (title); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_box_pack_start (GTK_BOX (main_vbox), label, FALSE, FALSE, 0); gtk_widget_show (label); g_free (title); #if GTK_CHECK_VERSION (3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); #else hbox = gtk_hbox_new (FALSE, 12); #endif gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); align = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, 12, 0); gtk_box_pack_start (GTK_BOX (hbox), align, FALSE, FALSE, 0); gtk_widget_show (align); #if GTK_CHECK_VERSION (3, 0, 0) vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); #else vbox = gtk_vbox_new (FALSE, 6); #endif gtk_container_add (GTK_CONTAINER (align), vbox); gtk_widget_show (vbox); /** Include pointer **/ check = gtk_check_button_new_with_mnemonic (_("Include _pointer")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), include_pointer); g_signal_connect (check, "toggled", G_CALLBACK (include_pointer_toggled_cb), NULL); gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, FALSE, 0); gtk_widget_show (check); /** Include window border **/ check = gtk_check_button_new_with_mnemonic (_("Include the window _border")); gtk_widget_set_sensitive (check, take_window_shot); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), include_border); g_signal_connect (check, "toggled", G_CALLBACK (include_border_toggled_cb), NULL); gtk_box_pack_start (GTK_BOX (vbox), check, FALSE, FALSE, 0); gtk_widget_show (check); border_check = check; /** Effects **/ #if GTK_CHECK_VERSION (3, 0, 0) hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); #else hbox = gtk_hbox_new (FALSE, 12); #endif gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("Apply _effect:")); gtk_widget_set_sensitive (label, take_window_shot); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (label), 0.0); gtk_label_set_yalign (GTK_LABEL (label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); #endif gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); effect_label = label; combo = create_effects_combo (); gtk_widget_set_sensitive (combo, take_window_shot); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); gtk_widget_show (combo); effect_combo = combo; }
/* * GUI warning/error dialog * args: * title - dialog title string * message - error message string * fatal - flag a fatal error (display device list combo box) * * asserts: * none * * returns: none */ void gui_error_gtk3( const char *title, const char *message, int fatal) { if(!gtk_init_called) { if(!gtk_init_check(NULL, NULL)) { fprintf(stderr, "GUVCVIEW: (GUI) Gtk3 can't open display\n"); fprintf(stderr, "%s: %s \n", title, message); return; } gtk_init_called = 1; } /*simple warning message - not fatal and no device selection*/ if(!fatal) { GtkWidget *warndialog; warndialog = gtk_message_dialog_new (GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, "%s",gettext(title)); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(warndialog), "%s",gettext(message)); gtk_widget_show(warndialog); gtk_dialog_run (GTK_DIALOG (warndialog)); gtk_widget_destroy (warndialog); return; } /*fatal error message*/ /*add device list (more than one device)*/ int show_dev_list = (v4l2core_get_num_devices() >= 1) ? 1: 0; GtkWidget *errdialog = NULL; if(show_dev_list) errdialog = gtk_dialog_new_with_buttons (_("Error"), GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Ok"), GTK_RESPONSE_ACCEPT, _("_Cancel"), GTK_RESPONSE_REJECT, NULL); else errdialog = gtk_dialog_new_with_buttons (_("Error"), GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Ok"), GTK_RESPONSE_ACCEPT, NULL); GtkWidget *table = gtk_grid_new(); GtkWidget *title_lbl = gtk_label_new (gettext(title)); #if GTK_VER_AT_LEAST(3,16) /* Style provider for this label. */ GtkCssProvider *providerTitle = gtk_css_provider_new(); gtk_style_context_add_provider(gtk_widget_get_style_context(title_lbl), GTK_STYLE_PROVIDER(providerTitle), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); gtk_css_provider_load_from_data(providerTitle, "GtkLabel { font: \"Sans bold 10\"; }", -1, NULL); g_object_unref(providerTitle); #else gtk_widget_override_font(title_lbl, pango_font_description_from_string ("Sans bold 10")); gtk_misc_set_alignment (GTK_MISC (title_lbl), 0, 0); #endif gtk_grid_attach (GTK_GRID (table), title_lbl, 0, 0, 2, 1); gtk_widget_show (title_lbl); GtkWidget *text = gtk_label_new (gettext(message)); #if GTK_VER_AT_LEAST(3,16) /* Style provider for this label. */ GtkCssProvider *providerText = gtk_css_provider_new(); gtk_style_context_add_provider(gtk_widget_get_style_context(text), GTK_STYLE_PROVIDER(providerText), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); gtk_css_provider_load_from_data(providerText, "GtkLabel { font: \"Sans italic 8\"; }", -1, NULL); g_object_unref(providerText); #else gtk_widget_override_font(text, pango_font_description_from_string ("Sans italic 8")); gtk_misc_set_alignment (GTK_MISC (text), 0, 0); #endif gtk_grid_attach (GTK_GRID (table), text, 0, 1, 2, 1); gtk_widget_show (text); GtkWidget *wgtDevices = NULL; if(show_dev_list) { GtkWidget *text2 = gtk_label_new (_("\nYou seem to have video devices installed.\n" "Do you want to try one ?\n")); #if GTK_VER_AT_LEAST(3,16) /* Style provider for this label. */ GtkCssProvider *providerText2 = gtk_css_provider_new(); gtk_style_context_add_provider(gtk_widget_get_style_context(text2), GTK_STYLE_PROVIDER(providerText2), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); gtk_css_provider_load_from_data(providerText2, "GtkLabel { font: \"Sans 10\"; }", -1, NULL); g_object_unref(providerText2); #else gtk_widget_override_font(text2, pango_font_description_from_string ("Sans 10")); gtk_misc_set_alignment (GTK_MISC (text2), 0, 0); #endif gtk_grid_attach (GTK_GRID (table), text2, 0, 2, 2, 1); gtk_widget_show (text2); GtkWidget *dev_lbl = gtk_label_new(_("Device:")); #if GTK_VER_AT_LEAST(3,15) gtk_label_set_xalign(GTK_LABEL(dev_lbl), 0.5); gtk_label_set_yalign(GTK_LABEL(dev_lbl), 0.5); #else gtk_misc_set_alignment (GTK_MISC (dev_lbl), 0.5, 0.5); #endif gtk_grid_attach (GTK_GRID(table), dev_lbl, 0, 3, 1, 1); gtk_widget_show (dev_lbl); wgtDevices = gtk_combo_box_text_new (); gtk_widget_set_halign (wgtDevices, GTK_ALIGN_FILL); gtk_widget_set_hexpand (wgtDevices, TRUE); int i = 0; for(i = 0; i < v4l2core_get_num_devices(); i++) { gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(wgtDevices), v4l2core_get_device_sys_data(i)->name); } /*select the last listed device by default*/ gtk_combo_box_set_active(GTK_COMBO_BOX(wgtDevices), v4l2core_get_num_devices() - 1); gtk_grid_attach(GTK_GRID(table), wgtDevices, 1, 3, 1, 1); gtk_widget_show (wgtDevices); } GtkWidget *content_area = gtk_dialog_get_content_area (GTK_DIALOG (errdialog)); gtk_container_add (GTK_CONTAINER (content_area), table); gtk_widget_show (table); int result = gtk_dialog_run (GTK_DIALOG (errdialog)); if(show_dev_list) { switch (result) { case GTK_RESPONSE_ACCEPT: { /*launch another guvcview instance for the selected device*/ int index = gtk_combo_box_get_active(GTK_COMBO_BOX(wgtDevices)); char videodevice[30]; strncpy(videodevice, v4l2core_get_device_sys_data(index)->device, 29); gchar *command = g_strjoin("", g_get_prgname(), " --device=", videodevice, NULL); /*spawn new process*/ GError *error = NULL; if(!(g_spawn_command_line_async(command, &error))) { fprintf(stderr, "GUVCVIEW: spawn failed: %s\n", error->message); g_error_free( error ); } g_free(command); } break; default: /* do nothing since dialog was cancelled or closed */ break; } } gtk_widget_destroy (errdialog); quit_callback(NULL); /*terminate the program*/ }
/* * attach v4l2 controls tab widget * args: * parent - tab parent widget * * asserts: * parent is not null * * returns: error code (0 -OK) */ int gui_attach_gtk3_v4l2ctrls(GtkWidget *parent) { /*assertions*/ assert(parent != NULL); if(debug_level > 1) printf("GUVCVIEW: attaching v4l2 controls\n"); GtkWidget *img_controls_grid = gtk_grid_new(); gtk_widget_show (img_controls_grid); gtk_grid_set_column_homogeneous (GTK_GRID(img_controls_grid), FALSE); gtk_widget_set_hexpand (img_controls_grid, TRUE); gtk_widget_set_halign (img_controls_grid, GTK_ALIGN_FILL); gtk_grid_set_row_spacing (GTK_GRID(img_controls_grid), 4); gtk_grid_set_column_spacing (GTK_GRID (img_controls_grid), 4); gtk_container_set_border_width (GTK_CONTAINER (img_controls_grid), 2); int i = 0; int n = 0; v4l2_ctrl_t *current = v4l2core_get_control_list(); for(; current != NULL; current = current->next, ++n) { if(current == NULL) { fprintf(stderr, "GUVCVIEW: ERROR (attach gtk3 controls) empty control in list\n"); break; } if(!is_control_panel && (current->control.id == V4L2_CID_FOCUS_LOGITECH || current->control.id == V4L2_CID_FOCUS_ABSOLUTE)) { ++n; /*add a virtual software autofocus control*/ } widget_list_size = n + 1; control_widgets_list = realloc(control_widgets_list, sizeof(control_widgets_t) * widget_list_size); if(control_widgets_list == NULL) { fprintf(stderr,"GUVCVIEW: FATAL memory allocation failure (gui_attach_gtk3_v4l2ctrls): %s\n", strerror(errno)); exit(-1); } /*label*/ char *tmp; tmp = g_strdup_printf ("%s:", current->name); control_widgets_list[widget_list_size - 1].label = gtk_label_new (tmp); g_free(tmp); gtk_widget_show (control_widgets_list[widget_list_size - 1].label); #if GTK_VER_AT_LEAST(3,15) gtk_label_set_xalign(GTK_LABEL(control_widgets_list[widget_list_size - 1].label), 1); gtk_label_set_yalign(GTK_LABEL(control_widgets_list[widget_list_size - 1].label), 0.5); #else gtk_misc_set_alignment (GTK_MISC (control_widgets_list[widget_list_size - 1].label), 1, 0.5); #endif control_widgets_list[widget_list_size - 1].id = current->control.id; control_widgets_list[widget_list_size - 1].widget = NULL; control_widgets_list[widget_list_size - 1].widget2 = NULL; /*usually a spin button*/ switch (current->control.type) { case V4L2_CTRL_TYPE_INTEGER: switch (current->control.id) { //special cases case V4L2_CID_PAN_RELATIVE: case V4L2_CID_TILT_RELATIVE: { control_widgets_list[n].widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 1); GtkWidget *PanTilt1 = NULL; GtkWidget *PanTilt2 = NULL; if(current->control.id == V4L2_CID_PAN_RELATIVE) { PanTilt1 = gtk_button_new_with_label(_("Left")); PanTilt2 = gtk_button_new_with_label(_("Right")); } else { PanTilt1 = gtk_button_new_with_label(_("Down")); PanTilt2 = gtk_button_new_with_label(_("Up")); } gtk_widget_show (PanTilt1); gtk_widget_show (PanTilt2); gtk_box_pack_start(GTK_BOX(control_widgets_list[n].widget),PanTilt1,TRUE,TRUE,2); gtk_box_pack_start(GTK_BOX(control_widgets_list[n].widget),PanTilt2,TRUE,TRUE,2); g_object_set_data (G_OBJECT (PanTilt1), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (PanTilt2), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signals*/ g_signal_connect (GTK_BUTTON(PanTilt1), "clicked", G_CALLBACK (button_PanTilt1_clicked), NULL); g_signal_connect (GTK_BUTTON(PanTilt2), "clicked", G_CALLBACK (button_PanTilt2_clicked), NULL); gtk_widget_show (control_widgets_list[n].widget); control_widgets_list[n].widget2 = gtk_spin_button_new_with_range(-256, 256, 64); gtk_editable_set_editable(GTK_EDITABLE(control_widgets_list[n].widget2), TRUE); if(current->control.id == V4L2_CID_PAN_RELATIVE) gtk_spin_button_set_value (GTK_SPIN_BUTTON(control_widgets_list[n].widget2), v4l2core_get_pan_step()); else gtk_spin_button_set_value (GTK_SPIN_BUTTON(control_widgets_list[n].widget2),v4l2core_get_tilt_step()); /*connect signal*/ g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_info", GINT_TO_POINTER(current->control.id)); g_signal_connect(GTK_SPIN_BUTTON(control_widgets_list[n].widget2),"value-changed", G_CALLBACK (pan_tilt_step_changed), NULL); gtk_widget_show (control_widgets_list[n].widget2); break; } case V4L2_CID_PAN_RESET: case V4L2_CID_TILT_RESET: { control_widgets_list[n].widget = gtk_button_new_with_label(" "); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signal*/ g_signal_connect (GTK_BUTTON(control_widgets_list[n].widget), "clicked", G_CALLBACK (button_clicked), NULL); break; }; case V4L2_CID_LED1_MODE_LOGITECH: { char* LEDMenu[4] = {_("Off"),_("On"),_("Blinking"),_("Auto")}; /*turn it into a menu control*/ if(!current->menu) current->menu = calloc(4+1, sizeof(struct v4l2_querymenu)); else current->menu = realloc(current->menu, (4+1) * sizeof(struct v4l2_querymenu)); if(current->menu == NULL) { fprintf(stderr,"GUVCVIEW: FATAL memory allocation failure (gui_attach_gtk3_v4l2ctrls): %s\n", strerror(errno)); exit(-1); } current->menu[0].id = current->control.id; current->menu[0].index = 0; current->menu[0].name[0] = 'N'; /*just set something here*/ current->menu[1].id = current->control.id; current->menu[1].index = 1; current->menu[1].name[0] = 'O'; current->menu[2].id = current->control.id; current->menu[2].index = 2; current->menu[2].name[0] = 'B'; current->menu[3].id = current->control.id; current->menu[3].index = 3; current->menu[3].name[0] = 'A'; current->menu[4].id = current->control.id; current->menu[4].index = current->control.maximum+1; current->menu[4].name[0] = '\0'; int j = 0; int def = 0; control_widgets_list[n].widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (control_widgets_list[n].widget), (char *) LEDMenu[j]); if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(control_widgets_list[n].widget), def); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signal*/ g_signal_connect (GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget), "changed", G_CALLBACK (combo_changed), NULL); break; } case V4L2_CID_RAW_BITS_PER_PIXEL_LOGITECH: { /*turn it into a menu control*/ char* BITSMenu[2] = {_("8 bit"),_("12 bit")}; /*turn it into a menu control*/ if(!current->menu) current->menu = calloc(2+1, sizeof(struct v4l2_querymenu)); else current->menu = realloc(current->menu, (2+1) * sizeof(struct v4l2_querymenu)); if(current->menu == NULL) { fprintf(stderr,"GUVCVIEW: FATAL memory allocation failure (gui_attach_gtk3_v4l2ctrls): %s\n", strerror(errno)); exit(-1); } current->menu[0].id = current->control.id; current->menu[0].index = 0; current->menu[0].name[0] = 'o'; /*just set something here*/ current->menu[1].id = current->control.id; current->menu[1].index = 1; current->menu[1].name[0] = 'd'; current->menu[2].id = current->control.id; current->menu[2].index = 2; current->menu[2].name[0] = '\0'; int j = 0; int def = 0; control_widgets_list[n].widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { //if (debug_level > 0) // printf("GUVCVIEW: adding menu entry %d: %d, %s\n",j, current->menu[j].index, current->menu[j].name); gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (control_widgets_list[n].widget), (char *) BITSMenu[j]); if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(control_widgets_list[n].widget), def); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signal*/ g_signal_connect (GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget), "changed", G_CALLBACK (combo_changed), NULL); break; } case V4L2_CID_FOCUS_LOGITECH: case V4L2_CID_FOCUS_ABSOLUTE: if(!is_control_panel) { /*add a virtual control for software autofocus*/ control_widgets_list[n-1].widget = gtk_check_button_new_with_label (_("Auto Focus (continuous)")); control_widgets_list[n-1].widget2 = gtk_button_new_with_label (_("set Focus")); gtk_widget_show (control_widgets_list[n-1].widget); gtk_widget_show (control_widgets_list[n-1].widget2); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (control_widgets_list[n-1].widget), FALSE); g_signal_connect (G_OBJECT (control_widgets_list[n-1].widget), "toggled", G_CALLBACK (autofocus_changed), NULL); g_signal_connect (G_OBJECT (control_widgets_list[n-1].widget2), "clicked", G_CALLBACK (setfocus_clicked), NULL); gtk_grid_attach(GTK_GRID(img_controls_grid), control_widgets_list[n-1].widget, 1, i, 1 , 1); gtk_widget_set_halign (control_widgets_list[n-1].widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (control_widgets_list[n-1].widget, TRUE); gtk_grid_attach(GTK_GRID(img_controls_grid), control_widgets_list[n-1].widget2, 2, i, 1 , 1); i++; } default: /*standard case - hscale + spin*/ { /* check for valid range */ if((current->control.maximum > current->control.minimum) && (current->control.step != 0)) { GtkAdjustment *adjustment = gtk_adjustment_new ( current->value, current->control.minimum, current->control.maximum, current->control.step, current->control.step*10, 0); control_widgets_list[n].widget = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); gtk_scale_set_draw_value (GTK_SCALE (control_widgets_list[n].widget), FALSE); gtk_scale_set_digits(GTK_SCALE(control_widgets_list[n].widget), 0); gtk_widget_show (control_widgets_list[n].widget); control_widgets_list[n].widget2= gtk_spin_button_new(adjustment, current->control.step, 0); gtk_editable_set_editable(GTK_EDITABLE(control_widgets_list[n].widget2),TRUE); gtk_widget_show (control_widgets_list[n].widget2); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_info", GINT_TO_POINTER(current->control.id)); if(!is_control_panel && (current->control.id == V4L2_CID_FOCUS_LOGITECH || current->control.id == V4L2_CID_FOCUS_ABSOLUTE)) { g_object_set_data (G_OBJECT (control_widgets_list[n-1].widget), "control_entry", control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n-1].widget), "control2_entry", control_widgets_list[n].widget2); } /*connect signals*/ g_signal_connect (GTK_SCALE(control_widgets_list[n].widget), "value-changed", G_CALLBACK (slider_changed), NULL); g_signal_connect(GTK_SPIN_BUTTON(control_widgets_list[n].widget2),"value-changed", G_CALLBACK (spin_changed), NULL); } else fprintf(stderr, "GUVCVIEW: (Invalid range) [MAX <= MIN] for control id: 0x%08x \n", current->control.id); break; } } break; #ifdef V4L2_CTRL_TYPE_INTEGER64 case V4L2_CTRL_TYPE_INTEGER64: widget = gtk_entry_new(); gtk_entry_set_max_length(control_widgets_list[n].widget, current->control.maximum); //control_widgets_list[n].widget2 = gtk_button_new_from_stock(GTK_STOCK_APPLY); control_widgets_list[n].widget2 = gtk_button_new_with_mnemonic (_("_Apply")); gtk_widget_show (control_widgets_list[n].widget); gtk_widget_show (control_widgets_list[n].widget2); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_entry", widget); /*connect signal*/ g_signal_connect (GTK_BUTTON(control_widgets_list[n].widget2), "clicked", G_CALLBACK (int64_button_clicked), NULL); break; #endif #ifdef V4L2_CTRL_TYPE_STRING case V4L2_CTRL_TYPE_STRING: control_widgets_list[n].widget = gtk_entry_new(); gtk_entry_set_max_length(control_widgets_list[n].widget, current->control.maximum); //control_widgets_list[n].widget2= gtk_button_new_from_stock(GTK_STOCK_APPLY); control_widgets_list[n].widget2 = gtk_button_new_with_mnemonic (_("_Apply")); gtk_widget_show (control_widgets_list[n].widget); gtk_widget_show (control_widgets_list[n].widget2); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_entry", widget); /*connect signal*/ g_signal_connect (GTK_BUTTON(control_widgets_list[n].widget2), "clicked", G_CALLBACK (string_button_clicked), NULL); break; #endif #ifdef V4L2_CTRL_TYPE_BITMASK case V4L2_CTRL_TYPE_BITMASK: control_widgets_list[n].widget = gtk_entry_new(); //control_widgets_list[n].widget2 = gtk_button_new_from_stock(GTK_STOCK_APPLY); control_widgets_list[n].widget2 = gtk_button_new_with_mnemonic (_("_Apply")); gtk_widget_show (control_widgets_list[n].widget); gtk_widget_show (control_widgets_list[n].widget2); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_info", GINT_TO_POINTER(current->control.id)); g_object_set_data (G_OBJECT (control_widgets_list[n].widget2), "control_entry", widget); g_signal_connect (GTK_BUTTON(control_widgets_list[n].widget2), "clicked", G_CALLBACK (bitmask_button_clicked), NULL); break; #endif #ifdef V4L2_CTRL_TYPE_INTEGER_MENU case V4L2_CTRL_TYPE_INTEGER_MENU: #endif case V4L2_CTRL_TYPE_MENU: if(current->menu) { int j = 0; int def = 0; control_widgets_list[n].widget = gtk_combo_box_text_new (); for (j = 0; current->menu[j].index <= current->control.maximum; j++) { if(current->control.type == V4L2_CTRL_TYPE_MENU) { gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (control_widgets_list[n].widget), (char *) current->menu_entry[j]); } #ifdef V4L2_CTRL_TYPE_INTEGER_MENU else { char buffer[30]="0"; snprintf(buffer, "%" PRIu64 "", 29, current->menu[j].value); gtk_combo_box_text_append_text ( GTK_COMBO_BOX_TEXT (control_widgets_list[n].widget), buffer); } #endif if(current->value == current->menu[j].index) def = j; } gtk_combo_box_set_active (GTK_COMBO_BOX(control_widgets_list[n].widget), def); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signal*/ g_signal_connect (GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget), "changed", G_CALLBACK (combo_changed), NULL); } break; case V4L2_CTRL_TYPE_BUTTON: control_widgets_list[n].widget = gtk_button_new_with_label(" "); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); g_signal_connect (GTK_BUTTON(control_widgets_list[n].widget), "clicked", G_CALLBACK (button_clicked), NULL); break; case V4L2_CTRL_TYPE_BOOLEAN: if(current->control.id ==V4L2_CID_DISABLE_PROCESSING_LOGITECH) { control_widgets_list[n].widget2 = gtk_combo_box_text_new (); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget2), "GBGB... | RGRG..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget2), "GRGR... | BGBG..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget2), "BGBG... | GRGR..."); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(control_widgets_list[n].widget2), "RGRG... | GBGB..."); v4l2core_set_bayer_pix_order(0); gtk_combo_box_set_active(GTK_COMBO_BOX(control_widgets_list[n].widget2), v4l2core_get_bayer_pix_order()); gtk_widget_show (control_widgets_list[n].widget2); /*connect signal*/ g_signal_connect (GTK_COMBO_BOX_TEXT (control_widgets_list[n].widget2), "changed", G_CALLBACK (bayer_pix_ord_changed), NULL); uint8_t isbayer = (current->value ? TRUE : FALSE); v4l2core_set_isbayer(isbayer); } control_widgets_list[n].widget = gtk_check_button_new(); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (control_widgets_list[n].widget), current->value ? TRUE : FALSE); gtk_widget_show (control_widgets_list[n].widget); g_object_set_data (G_OBJECT (control_widgets_list[n].widget), "control_info", GINT_TO_POINTER(current->control.id)); /*connect signal*/ g_signal_connect (GTK_TOGGLE_BUTTON(control_widgets_list[n].widget), "toggled", G_CALLBACK (check_changed), NULL); break; default: printf("control[%d]:(unknown - 0x%x) 0x%x '%s'\n",i ,current->control.type, current->control.id, current->control.name); break; } /*attach widgets to grid*/ gtk_grid_attach(GTK_GRID(img_controls_grid), control_widgets_list[n].label, 0, i, 1 , 1); if(control_widgets_list[n].widget) { gtk_grid_attach(GTK_GRID(img_controls_grid), control_widgets_list[n].widget, 1, i, 1 , 1); gtk_widget_set_halign (control_widgets_list[n].widget, GTK_ALIGN_FILL); gtk_widget_set_hexpand (control_widgets_list[n].widget, TRUE); } if(control_widgets_list[n].widget2) { gtk_grid_attach(GTK_GRID(img_controls_grid), control_widgets_list[n].widget2, 2, i, 1 , 1); } i++; } /*add control grid to parent container*/ gtk_container_add(GTK_CONTAINER(parent), img_controls_grid); gui_gtk3_update_controls_state(); return 0; }
static void msd_ldsm_dialog_init (MsdLdsmDialog *dialog) { GtkWidget *main_vbox, *text_vbox, *hbox; GtkWidget *image; dialog->priv = MSD_LDSM_DIALOG_GET_PRIVATE (dialog); main_vbox = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); /* Set up all the window stuff here */ gtk_window_set_title (GTK_WINDOW (dialog), _("Low Disk Space")); gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_DIALOG_WARNING); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER); gtk_window_set_urgency_hint (GTK_WINDOW (dialog), TRUE); gtk_window_set_focus_on_map (GTK_WINDOW (dialog), FALSE); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); /* Create the image */ image = gtk_image_new_from_icon_name ("dialog-warning", GTK_ICON_SIZE_DIALOG); #if GTK_CHECK_VERSION (3, 0, 0) gtk_widget_set_halign (image, GTK_ALIGN_START); gtk_widget_set_valign (image, GTK_ALIGN_END); #else gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0); #endif /* Create the labels */ dialog->priv->primary_label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (dialog->priv->primary_label), TRUE); gtk_label_set_single_line_mode (GTK_LABEL (dialog->priv->primary_label), FALSE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (dialog->priv->primary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (dialog->priv->primary_label), 0.0); #else gtk_misc_set_alignment (GTK_MISC (dialog->priv->primary_label), 0.0, 0.0); #endif dialog->priv->secondary_label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (dialog->priv->secondary_label), TRUE); gtk_label_set_single_line_mode (GTK_LABEL (dialog->priv->secondary_label), FALSE); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (dialog->priv->secondary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (dialog->priv->secondary_label), 0.0); #else gtk_misc_set_alignment (GTK_MISC (dialog->priv->secondary_label), 0.0, 0.0); #endif /* Create the check button to ignore future warnings */ dialog->priv->ignore_check_button = gtk_check_button_new (); /* The button should be inactive if the dialog was just called. * I suppose it could be possible for the user to manually edit the GSettings key between * the mount being checked and the dialog appearing, but I don't think it matters * too much */ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->priv->ignore_check_button), FALSE); g_signal_connect (dialog->priv->ignore_check_button, "toggled", G_CALLBACK (ignore_check_button_toggled_cb), dialog); /* Now set up the dialog's GtkBox's' */ gtk_box_set_spacing (GTK_BOX (main_vbox), 14); hbox = gtk_hbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (hbox), 5); text_vbox = gtk_vbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (text_vbox), dialog->priv->primary_label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (text_vbox), dialog->priv->secondary_label, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (text_vbox), dialog->priv->ignore_check_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), text_vbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); /* Set up the action area */ gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_action_area (GTK_DIALOG (dialog))), 6); gtk_container_set_border_width (GTK_CONTAINER (gtk_dialog_get_action_area (GTK_DIALOG (dialog))), 5); gtk_widget_show_all (hbox); }