static GtkWidget * cc_sharing_panel_new_media_sharing_row (const char *uri_or_path, CcSharingPanel *self) { GtkWidget *row, *box, *w; GUserDirectory dir = G_USER_N_DIRECTORIES; GIcon *icon; guint i; char *basename, *path; GFile *file; file = g_file_new_for_commandline_arg (uri_or_path); path = g_file_get_path (file); g_object_unref (file); row = gtk_list_box_row_new (); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_container_set_border_width (GTK_CONTAINER (box), 12); gtk_container_add (GTK_CONTAINER (row), box); /* Find the icon and create it */ for (i = 0; i < G_USER_N_DIRECTORIES; i++) { if (g_strcmp0 (path, g_get_user_special_dir (i)) == 0) { dir = i; break; } } icon = special_directory_get_gicon (dir); w = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_MENU); gtk_widget_set_margin_end (w, 12); gtk_container_add (GTK_CONTAINER (box), w); g_object_unref (icon); /* Label */ basename = g_filename_display_basename (path); w = gtk_label_new (basename); g_free (basename); gtk_container_add (GTK_CONTAINER (box), w); /* Remove button */ w = gtk_button_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_button_set_relief (GTK_BUTTON (w), GTK_RELIEF_NONE); gtk_widget_set_margin_top (w, 3); gtk_widget_set_margin_bottom (w, 3); gtk_widget_set_margin_end (w, 12); gtk_widget_set_valign (w, GTK_ALIGN_CENTER); gtk_box_pack_end (GTK_BOX (box), w, FALSE, FALSE, 0); g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (cc_sharing_panel_remove_folder), self); g_object_set_data (G_OBJECT (w), "row", row); g_object_set_data_full (G_OBJECT (row), "path", g_strdup (path), g_free); gtk_widget_show_all (row); return row; }
static GtkWidget * add_row (CcPrivacyPanel *self, const gchar *label, const gchar *dialog_id, GtkWidget *status) { GtkWidget *box, *row, *w; row = gtk_list_box_row_new (); box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 50); gtk_container_add (GTK_CONTAINER (row), box); g_object_set_data (G_OBJECT (row), "dialog-id", (gpointer)dialog_id); gtk_widget_set_hexpand (box, TRUE); gtk_container_add (GTK_CONTAINER (self->priv->list_box), row); w = gtk_label_new (label); gtk_widget_set_halign (w, GTK_ALIGN_START); gtk_widget_set_margin_start (w, 20); gtk_widget_set_margin_end (w, 20); gtk_widget_set_margin_top (w, 12); gtk_widget_set_margin_bottom (w, 12); gtk_widget_set_halign (w, GTK_ALIGN_START); gtk_widget_set_valign (w, GTK_ALIGN_CENTER); gtk_widget_set_hexpand (w, TRUE); gtk_box_pack_start (GTK_BOX (box), w, TRUE, TRUE, 0); gtk_widget_set_margin_start (status, 20); gtk_widget_set_margin_end (status, 20); gtk_widget_set_halign (status, GTK_ALIGN_END); gtk_widget_set_valign (status, GTK_ALIGN_CENTER); gtk_box_pack_end (GTK_BOX (box), status, FALSE, FALSE, 0); gtk_widget_show_all (row); return row; }
static void add_dns_row (CEPageIP6 *page, const gchar *address) { GtkWidget *row; GtkWidget *row_box; GtkWidget *label; GtkWidget *widget; GtkWidget *delete_button; GtkWidget *image; row = gtk_list_box_row_new (); gtk_widget_set_can_focus (row, FALSE); row_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); label = gtk_label_new (_("Server")); gtk_widget_set_halign (label, GTK_ALIGN_END); gtk_box_pack_start (GTK_BOX (row_box), label, FALSE, FALSE, 0); widget = gtk_entry_new (); gtk_label_set_mnemonic_widget (GTK_LABEL (label), widget); g_signal_connect_swapped (widget, "changed", G_CALLBACK (ce_page_changed), page); g_object_set_data (G_OBJECT (row), "address", widget); gtk_entry_set_text (GTK_ENTRY (widget), address); gtk_widget_set_margin_start (widget, 10); gtk_widget_set_margin_end (widget, 10); gtk_widget_set_hexpand (widget, TRUE); gtk_box_pack_start (GTK_BOX (row_box), widget, TRUE, TRUE, 0); delete_button = gtk_button_new (); gtk_style_context_add_class (gtk_widget_get_style_context (delete_button), "image-button"); g_signal_connect (delete_button, "clicked", G_CALLBACK (remove_row), page); image = gtk_image_new_from_icon_name ("user-trash-symbolic", GTK_ICON_SIZE_MENU); atk_object_set_name (gtk_widget_get_accessible (delete_button), _("Delete DNS Server")); gtk_button_set_image (GTK_BUTTON (delete_button), image); gtk_box_pack_start (GTK_BOX (row_box), delete_button, FALSE, FALSE, 0); g_object_set_data (G_OBJECT (row), "delete-button", delete_button); gtk_widget_set_margin_start (row_box, 10); gtk_widget_set_margin_end (row_box, 10); gtk_widget_set_margin_top (row_box, 10); gtk_widget_set_margin_bottom (row_box, 10); gtk_widget_set_halign (row_box, GTK_ALIGN_FILL); gtk_container_add (GTK_CONTAINER (row), row_box); gtk_widget_show_all (row); gtk_container_add (GTK_CONTAINER (page->dns_list), row); update_row_sensitivity (page, page->dns_list); }
static void ensure_size_window (MetaResizePopup *popup) { GtkWidget *frame; if (popup->size_window) return; popup->size_window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_screen (GTK_WINDOW (popup->size_window), gdk_display_get_default_screen (gdk_x11_lookup_xdisplay (popup->display))); /* never shrink the size window */ gtk_window_set_resizable (GTK_WINDOW (popup->size_window), TRUE); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); gtk_container_add (GTK_CONTAINER (popup->size_window), frame); popup->size_label = gtk_label_new (""); gtk_widget_set_margin_start (popup->size_label, 3); gtk_widget_set_margin_end (popup->size_label, 3); gtk_widget_set_margin_top (popup->size_label, 3); gtk_widget_set_margin_bottom (popup->size_label, 3); gtk_container_add (GTK_CONTAINER (frame), popup->size_label); gtk_widget_show_all (frame); }
static void update_title_header (GtkListBoxRow *row, GtkListBoxRow *before, gpointer data) { GtkWidget *header; gchar *title; header = gtk_list_box_row_get_header (row); title = (gchar *)g_object_get_data (G_OBJECT (row), "title"); if (!header && title) { title = g_strdup_printf ("<b>%s</b>", title); header = gtk_label_new (title); gtk_label_set_use_markup (GTK_LABEL (header), TRUE); gtk_widget_set_halign (header, GTK_ALIGN_START); gtk_widget_set_margin_top (header, 12); gtk_widget_set_margin_start (header, 6); gtk_widget_set_margin_end (header, 6); gtk_widget_set_margin_bottom (header, 6); gtk_widget_show (header); gtk_list_box_row_set_header (row, header); g_free (title); } }
static void photos_edit_palette_row_constructed (GObject *object) { PhotosEditPaletteRow *self = PHOTOS_EDIT_PALETTE_ROW (object); GtkWidget *grid0; GtkWidget *grid1; GtkWidget *image; GtkWidget *label; GtkWidget *tool_widget; const gchar *icon_name; const gchar *name; gchar *name_markup; G_OBJECT_CLASS (photos_edit_palette_row_parent_class)->constructed (object); self->row_revealer = gtk_revealer_new(); gtk_revealer_set_transition_type (GTK_REVEALER (self->row_revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); gtk_container_add (GTK_CONTAINER (self), self->row_revealer); grid0 = gtk_grid_new (); gtk_widget_set_margin_bottom (grid0, 6); gtk_widget_set_margin_start (grid0, 18); gtk_widget_set_margin_end (grid0, 18); gtk_widget_set_margin_top (grid0, 6); gtk_orientable_set_orientation (GTK_ORIENTABLE (grid0), GTK_ORIENTATION_VERTICAL); gtk_container_add (GTK_CONTAINER (self->row_revealer), grid0); grid1 = gtk_grid_new (); gtk_orientable_set_orientation (GTK_ORIENTABLE (grid1), GTK_ORIENTATION_HORIZONTAL); gtk_grid_set_column_spacing (GTK_GRID (grid1), 12); gtk_container_add (GTK_CONTAINER (grid0), grid1); icon_name = photos_tool_get_icon_name (self->tool); image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON); gtk_container_add (GTK_CONTAINER (grid1), image); name = photos_tool_get_name (self->tool); label = gtk_label_new (NULL); name_markup = g_strdup_printf ("<b>%s</b>", name); gtk_label_set_markup (GTK_LABEL (label), name_markup); gtk_container_add (GTK_CONTAINER (grid1), label); self->details_revealer = gtk_revealer_new (); gtk_revealer_set_transition_type (GTK_REVEALER (self->details_revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN); gtk_container_add (GTK_CONTAINER (grid0), self->details_revealer); tool_widget = photos_tool_get_widget (self->tool); gtk_widget_set_margin_bottom (tool_widget, 12); gtk_widget_set_margin_top (tool_widget, 12); gtk_container_add (GTK_CONTAINER (self->details_revealer), tool_widget); gtk_size_group_add_widget (self->size_group, tool_widget); g_signal_connect_swapped (self->tool, "hide-requested", G_CALLBACK (photos_edit_palette_row_hide_details), self); gtk_widget_show_all (GTK_WIDGET (self)); g_free (name_markup); g_clear_object (&self->size_group); /* We will not need it any more */ }
static GtkWidget * create_complex_popover (GtkWidget *parent, GtkPositionType pos) { GtkWidget *popover, *window, *content; GtkBuilder *builder; builder = gtk_builder_new (); gtk_builder_add_from_resource (builder, "/popover/popover.ui", NULL); window = GTK_WIDGET (gtk_builder_get_object (builder, "window")); content = gtk_bin_get_child (GTK_BIN (window)); g_object_ref (content); gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (content)), content); gtk_widget_destroy (window); g_object_unref (builder); popover = create_popover (parent, content, GTK_POS_BOTTOM); g_object_unref (content); gtk_widget_set_size_request (popover, 200, -1); gtk_widget_set_vexpand (popover, TRUE); gtk_widget_set_margin_start (popover, 10); gtk_widget_set_margin_end (popover, 10); gtk_widget_set_margin_bottom (popover, 10); return popover; }
static GtkWidget * handle_builder_error (const gchar *message, ...) { GtkWidget *label; gchar *msg; gchar *msg_plain; va_list args; va_start (args, message); msg_plain = g_strdup_vprintf (message, args); va_end (args); label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); msg = g_strconcat ("<span size=\"large\" weight=\"bold\">", msg_plain, "</span>\n\n", _("Please check your installation."), NULL); gtk_label_set_markup (GTK_LABEL (label), msg); g_free (msg_plain); g_free (msg); gtk_widget_set_margin_start (label, 6); gtk_widget_set_margin_end (label, 6); gtk_widget_set_margin_top (label, 6); gtk_widget_set_margin_bottom (label, 6); return label; }
static gboolean ask_and_delete(gpointer user_data) { GList *empty_dirs = (GList *)user_data; const int n_empty_dirs = g_list_length(empty_dirs); GtkWidget *dialog; GtkWidget *win = dt_ui_main_window(darktable.gui->ui); dialog = gtk_message_dialog_new(GTK_WINDOW(win), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, ngettext("do you want to remove this empty directory?", "do you want to remove these empty directories?", n_empty_dirs)); gtk_window_set_title(GTK_WINDOW(dialog), ngettext("remove empty directory?", "remove empty directories?", n_empty_dirs)); GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); GtkWidget *scroll = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_vexpand(scroll, TRUE); gtk_widget_set_margin_start(scroll, DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_end(scroll, DT_PIXEL_APPLY_DPI(10)); gtk_widget_set_margin_top(scroll, DT_PIXEL_APPLY_DPI(0)); gtk_widget_set_margin_bottom(scroll, DT_PIXEL_APPLY_DPI(0)); GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING); for(GList *list_iter = empty_dirs; list_iter; list_iter = g_list_next(list_iter)) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, list_iter->data, -1); } GtkWidget *tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(_("name"), gtk_cell_renderer_text_new(), "text", 0, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); gtk_container_add(GTK_CONTAINER(scroll), tree); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(content_area), scroll); gtk_widget_show_all(dialog); // needed for the content area! gint res = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if(res == GTK_RESPONSE_YES) for(GList *iter = empty_dirs; iter; iter = g_list_next(iter)) rmdir((char *)iter->data); g_list_free_full(empty_dirs, g_free); g_object_unref(store); return FALSE; }
static void gcr_viewer_window_constructed (GObject *obj) { GcrViewerWindow *self = GCR_VIEWER_WINDOW (obj); GtkWidget *bbox; GtkWidget *box; GtkWidget *button; G_OBJECT_CLASS (gcr_viewer_window_parent_class)->constructed (obj); bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); gtk_box_set_spacing (GTK_BOX (bbox), 12); gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); gtk_widget_show (bbox); self->pv->import = gcr_import_button_new (_("Import")); g_signal_connect_object (self->pv->import, "importing", G_CALLBACK (on_import_button_importing), self, 0); g_signal_connect_object (self->pv->import, "imported", G_CALLBACK (on_import_button_imported), self, 0); gtk_widget_show (GTK_WIDGET (self->pv->import)); button = gtk_button_new_with_mnemonic (_("_Close")); g_signal_connect_object (button, "clicked", G_CALLBACK (on_close_clicked), self, 0); gtk_widget_show (button); gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, TRUE, 0); gtk_box_pack_start (GTK_BOX (bbox), GTK_WIDGET (self->pv->import), FALSE, TRUE, 0); gtk_widget_set_halign (bbox, 0.5); gtk_widget_set_valign (bbox, 0.5); #if GTK_CHECK_VERSION (3, 12, 0) gtk_widget_set_margin_end (bbox, 12); #else gtk_widget_set_margin_right (bbox, 12); #endif self->pv->viewer = gcr_viewer_widget_new (); g_object_bind_property (self->pv->viewer, "display-name", self, "title", G_BINDING_SYNC_CREATE); g_signal_connect_object (self->pv->viewer, "added", G_CALLBACK (on_viewer_renderer_added), self, 0); gtk_widget_show (GTK_WIDGET (self->pv->viewer)); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_widget_show (box); gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (self->pv->viewer), TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (box), bbox, FALSE, FALSE, 6); gtk_container_add (GTK_CONTAINER (self), box); gtk_window_set_default_size (GTK_WINDOW (self), 250, 400); }
static void set_row_widget_margins (GtkWidget *widget) { gtk_widget_set_margin_start (widget, 20); gtk_widget_set_margin_end (widget, 20); gtk_widget_set_margin_top (widget, 6); gtk_widget_set_margin_bottom (widget, 6); }
static void gis_page_init (GisPage *page) { gtk_widget_set_margin_start (GTK_WIDGET (page), 12); gtk_widget_set_margin_top (GTK_WIDGET (page), 12); gtk_widget_set_margin_bottom (GTK_WIDGET (page), 12); gtk_widget_set_margin_end (GTK_WIDGET (page), 12); }
static void show_account (GoaProvider *provider, GoaClient *client, GoaObject *object, GtkBox *vbox, G_GNUC_UNUSED GtkGrid *dummy1, G_GNUC_UNUSED GtkGrid *dummy2) { EditData *data = NULL; GtkWidget *grid; GtkWidget *params_button = NULL; GtkWidget *details_button = NULL; GtkWidget *button_box = NULL; gint row = 0; goa_utils_account_add_attention_needed (client, object, provider, vbox); grid = gtk_grid_new (); gtk_widget_set_halign (grid, GTK_ALIGN_CENTER); gtk_widget_set_hexpand (grid, TRUE); gtk_widget_set_margin_end (grid, 72); gtk_widget_set_margin_start (grid, 72); gtk_widget_set_margin_top (grid, 24); gtk_grid_set_column_spacing (GTK_GRID (grid), 12); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_container_add (GTK_CONTAINER (vbox), grid); goa_utils_account_add_header (object, GTK_GRID (grid), row++); goa_util_add_row_switch_from_keyfile_with_blurb (GTK_GRID (grid), row++, object, /* Translators: This is a label for a series of * options switches. For example: “Use for Mail”. */ _("Use for"), "chat-disabled", _("C_hat")); data = edit_data_new (object, tpaw_get_toplevel_window (GTK_WIDGET (vbox))); /* Connection Settings button */ params_button = gtk_button_new_with_mnemonic (_("_Connection Settings")); edit_data_handle_button (data, params_button, G_CALLBACK (edit_parameters_clicked_cb)); /* Edit Personal Information button */ details_button = gtk_button_new_with_mnemonic (_("_Personal Details")); edit_data_handle_button (data, details_button, G_CALLBACK (edit_personal_details_clicked_cb)); /* Box containing the buttons */ button_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (button_box), params_button, FALSE, FALSE, 12); gtk_container_add (GTK_CONTAINER (button_box), details_button); goa_util_add_row_widget (GTK_GRID (grid), row++, NULL, button_box); edit_data_unref (data); }
static void gtk_tooltip_init (GtkTooltip *tooltip) { GtkStyleContext *context; GtkWidget *window; GtkWidget *box; GtkWidget *image; GtkWidget *label; tooltip->timeout_id = 0; tooltip->browse_mode_timeout_id = 0; tooltip->browse_mode_enabled = FALSE; tooltip->keyboard_mode_enabled = FALSE; tooltip->current_window = NULL; tooltip->keyboard_widget = NULL; tooltip->tooltip_widget = NULL; tooltip->last_window = NULL; window = gtk_window_new (GTK_WINDOW_POPUP); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_TOOLTIP); gtk_window_set_resizable (GTK_WINDOW (window), FALSE); gtk_window_set_use_subsurface (GTK_WINDOW (window), TRUE); g_signal_connect (window, "hide", G_CALLBACK (gtk_tooltip_window_hide), tooltip); _gtk_window_request_csd (GTK_WINDOW (window)); context = gtk_widget_get_style_context (window); gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOOLTIP); /* FIXME: don't hardcode the padding */ box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_set_margin_start (box, 6); gtk_widget_set_margin_end (box, 6); gtk_widget_set_margin_top (box, 6); gtk_widget_set_margin_bottom (box, 6); gtk_container_add (GTK_CONTAINER (window), box); gtk_widget_show (box); image = gtk_image_new (); gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, 0); label = gtk_label_new (""); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); tooltip->window = window; tooltip->box = box; tooltip->image = image; tooltip->label = label; tooltip->custom_widget = NULL; }
void style_set_margin_end(GtkWidget *widget, gint margin) { #if (GTK_MAJOR_VERSION > 3) || (GTK_MINOR_VERSION >= 12) gtk_widget_set_margin_end(widget, margin); #else if(gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL) gtk_widget_set_margin_left(widget, margin); else gtk_widget_set_margin_right(widget, margin); #endif }
static void gs_page_needs_user_action (GsPageHelper *helper, AsScreenshot *ss) { GtkWidget *content_area; GtkWidget *dialog; GtkWidget *ssimg; g_autofree gchar *escaped = NULL; GsPagePrivate *priv = gs_page_get_instance_private (helper->page); dialog = gtk_message_dialog_new (gs_shell_get_window (priv->shell), GTK_DIALOG_MODAL | GTK_DIALOG_USE_HEADER_BAR, GTK_MESSAGE_INFO, GTK_BUTTONS_CANCEL, /* TRANSLATORS: this is a prompt message, and * '%s' is an application summary, e.g. 'GNOME Clocks' */ _("Prepare %s"), gs_app_get_name (helper->app)); escaped = g_markup_escape_text (as_screenshot_get_caption (ss, NULL), -1); gtk_message_dialog_format_secondary_markup (GTK_MESSAGE_DIALOG (dialog), "%s", escaped); /* this will be enabled when the device is in the right mode */ helper->button_install = gtk_dialog_add_button (GTK_DIALOG (dialog), /* TRANSLATORS: update the fw */ _("Install"), GTK_RESPONSE_OK); helper->notify_quirk_id = g_signal_connect (helper->app, "notify::quirk", G_CALLBACK (gs_page_notify_quirk_cb), helper); gtk_widget_set_sensitive (helper->button_install, FALSE); /* load screenshot */ helper->soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, gs_user_agent (), NULL); ssimg = gs_screenshot_image_new (helper->soup_session); gs_screenshot_image_set_screenshot (GS_SCREENSHOT_IMAGE (ssimg), ss); gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg), 400, 225); gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), helper->cancellable); gtk_widget_set_margin_start (ssimg, 24); gtk_widget_set_margin_end (ssimg, 24); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_container_add (GTK_CONTAINER (content_area), ssimg); gtk_container_child_set (GTK_CONTAINER (content_area), ssimg, "pack-type", GTK_PACK_END, NULL); /* handle this async */ g_signal_connect (dialog, "response", G_CALLBACK (gs_page_update_app_response_cb), helper); gs_shell_modal_dialog_present (priv->shell, GTK_DIALOG (dialog)); }
static GtkWidget * padded_label_new (char *text, gboolean narrow) { GtkWidget *widget; widget = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10); gtk_widget_set_halign (widget, GTK_ALIGN_CENTER); gtk_widget_set_margin_top (widget, 10); gtk_widget_set_margin_bottom (widget, 10); gtk_widget_set_margin_start (widget, narrow ? 10 : 80); gtk_widget_set_margin_end (widget, narrow ? 10 : 80); gtk_box_pack_start (GTK_BOX (widget), gtk_label_new (text), FALSE, FALSE, 0); return widget; }
static void ekiga_window_init_status_toolbar (EkigaWindow *mw) { g_return_if_fail (EKIGA_IS_WINDOW (mw)); /* The main horizontal toolbar */ mw->priv->status_toolbar = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); mw->priv->status_option_menu = status_menu_new (gm_application_get_core (mw->priv->app)); status_menu_set_parent_window (STATUS_MENU (mw->priv->status_option_menu), GTK_WINDOW (mw)); gtk_box_pack_start (GTK_BOX (mw->priv->status_toolbar), mw->priv->status_option_menu, TRUE, TRUE, 0); gtk_widget_set_margin_start (mw->priv->status_option_menu, 0); gtk_widget_set_margin_end (mw->priv->status_option_menu, 0); gtk_widget_show_all (mw->priv->status_toolbar); }
static void ekiga_window_init_actions_toolbar (EkigaWindow *mw) { GtkWidget *image = NULL; GtkWidget *button = NULL; GtkWidget *switcher = NULL; g_return_if_fail (EKIGA_IS_WINDOW (mw)); mw->priv->actions_toolbar = gtk_header_bar_new (); gtk_window_set_titlebar (GTK_WINDOW (mw), mw->priv->actions_toolbar); /* Start packing buttons */ button = gtk_button_new (); image = gtk_image_new_from_icon_name ("call-start-symbolic", GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (button), image); gtk_widget_set_tooltip_text (GTK_WIDGET (button), _("Call the selected contact")); gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (button), "win.call"); gtk_header_bar_pack_start (GTK_HEADER_BAR (mw->priv->actions_toolbar), button); mw->priv->preview_button = gtk_toggle_button_new (); image = gtk_image_new_from_icon_name ("camera-web-symbolic", GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (mw->priv->preview_button), image); gtk_widget_set_tooltip_text (GTK_WIDGET (mw->priv->preview_button), _("Display images from your camera device")); gtk_actionable_set_detailed_action_name (GTK_ACTIONABLE (mw->priv->preview_button), "win.enable-preview"); gtk_header_bar_pack_start (GTK_HEADER_BAR (mw->priv->actions_toolbar), mw->priv->preview_button); switcher = gtk_stack_switcher_new (); gtk_stack_switcher_set_stack (GTK_STACK_SWITCHER (switcher), GTK_STACK (mw->priv->main_stack)); gtk_header_bar_set_custom_title (GTK_HEADER_BAR (mw->priv->actions_toolbar), switcher); gtk_widget_set_margin_end (GTK_WIDGET (switcher), 6); mw->priv->menu_button = gtk_menu_button_new (); g_object_set (G_OBJECT (mw->priv->menu_button), "use-popover", true, NULL); image = gtk_image_new_from_icon_name ("open-menu-symbolic", GTK_ICON_SIZE_MENU); gtk_button_set_image (GTK_BUTTON (mw->priv->menu_button), image); gtk_header_bar_pack_end (GTK_HEADER_BAR (mw->priv->actions_toolbar), mw->priv->menu_button); gtk_widget_show_all (mw->priv->actions_toolbar); gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (mw->priv->actions_toolbar), TRUE); }
static void cc_mouse_panel_init (CcMousePanel *self) { CcMousePanelPrivate *priv; priv = self->priv = MOUSE_PANEL_PRIVATE (self); g_resources_register (cc_mouse_get_resource ()); priv->prefs_widget = cc_mouse_properties_new (); priv->test_widget = cc_mouse_test_new (); gtk_widget_set_margin_start (priv->prefs_widget, 6); gtk_widget_set_margin_end (priv->prefs_widget, 6); gtk_widget_set_margin_top (priv->prefs_widget, 6); gtk_widget_set_margin_bottom (priv->prefs_widget, 6); gtk_container_add (GTK_CONTAINER (self), priv->prefs_widget); gtk_widget_show (priv->prefs_widget); gtk_widget_show (priv->test_widget); }
static void mtpc_statusbar_init(MtpcStatusbar *statusbar) { MtpcStatusbarPrivate *priv; priv = mtpc_statusbar_get_instance_private(statusbar); gtk_box_set_spacing(GTK_BOX(statusbar), 6); gtk_widget_set_margin_top(GTK_WIDGET(statusbar), 3); gtk_widget_set_margin_end(GTK_WIDGET(statusbar), 6); gtk_widget_set_margin_bottom(GTK_WIDGET(statusbar), 3); gtk_widget_set_margin_start(GTK_WIDGET(statusbar), 6); /* list info */ priv->list_info = gtk_label_new(NULL); gtk_label_set_ellipsize(GTK_LABEL(priv->list_info), PANGO_ELLIPSIZE_END); gtk_box_pack_start(GTK_BOX(statusbar), priv->list_info, FALSE, FALSE, 0); /* primary text */ priv->primary_text = gtk_label_new(NULL); gtk_label_set_ellipsize(GTK_LABEL(priv->primary_text), PANGO_ELLIPSIZE_END); gtk_box_pack_start(GTK_BOX(statusbar), priv->primary_text, FALSE, FALSE, 0); /* seconary text */ priv->secondary_text = gtk_label_new(NULL); gtk_label_set_ellipsize(GTK_LABEL(priv->secondary_text), PANGO_ELLIPSIZE_END); gtk_box_pack_start(GTK_BOX(statusbar), priv->secondary_text, FALSE, FALSE, 12); /* action area */ priv->action_area = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(priv->action_area); gtk_box_pack_end(GTK_BOX(statusbar), priv->action_area, FALSE, FALSE, 0); mtpc_statusbar_show_section(statusbar, MTPC_STATUSBAR_SECTION_FILE_LIST); }
static void add_access_point_other (GisNetworkPage *page) { GisNetworkPagePrivate *priv = gis_network_page_get_instance_private (page); GtkWidget *row; GtkWidget *widget; row = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_widget_set_margin_start (row, 12); gtk_widget_set_margin_end (row, 12); widget = gtk_label_new (C_("Wireless access point", "Other…")); gtk_widget_set_margin_top (widget, 12); gtk_widget_set_margin_bottom (widget, 12); gtk_box_pack_start (GTK_BOX (row), widget, FALSE, FALSE, 0); gtk_widget_show_all (row); g_object_set_data (G_OBJECT (row), "object-path", "ap-other..."); g_object_set_data (G_OBJECT (row), "strength", GUINT_TO_POINTER (0)); gtk_container_add (GTK_CONTAINER (priv->network_list), row); }
static void process_single_field( GtkWidget * container, int row_index, const char * label, const char * value, int is_password) { GtkWidget * label_widget = gtk_label_new(label); gtk_widget_set_halign(GTK_WIDGET(label_widget), GTK_ALIGN_END); gtk_widget_set_margin_end(GTK_WIDGET(label_widget), 5); GtkWidget * value_widget = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(value_widget), value); gtk_widget_set_hexpand(GTK_WIDGET(value_widget), TRUE); g_object_set(G_OBJECT(value_widget), "editable", FALSE, NULL ); GtkWidget * copy_button = NULL, *reveal_button = NULL; if(is_password) { gtk_entry_set_visibility(GTK_ENTRY(value_widget), FALSE); copy_button = gtk_button_new_with_mnemonic("_Copy"); g_signal_connect(G_OBJECT(copy_button), "clicked", G_CALLBACK(handle_copy_button), value_widget); reveal_button = gtk_button_new_with_mnemonic("_Reveal"); g_signal_connect(G_OBJECT(reveal_button), "clicked", G_CALLBACK(handle_reveal_button), value_widget); } gtk_grid_attach(GTK_GRID(container), label_widget, 0, row_index, 1, 1); gtk_grid_attach(GTK_GRID(container), value_widget, 1, row_index, copy_button == NULL ? 3 : 1, 1); if(copy_button) { gtk_grid_attach(GTK_GRID(container), copy_button, 2, row_index, 1, 1); gtk_grid_attach(GTK_GRID(container), reveal_button, 3, row_index, 1, 1); } }
MidiogreApp *midiogre_app_init(void) { MidiogreApp *app; GtkWidget *header; GtkWidget *separator; GtkWidget *scrolled; GtkWidget *label,*frame; GtkWidget *button; GtkBox *box; gint i; GError *err; /* Allocate app */ app = calloc(1, sizeof(MidiogreApp)); /* Setup window */ app->window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL)); gtk_window_set_default_size(GTK_WINDOW(app->window), 600, 400); g_signal_connect(app->window, "destroy", G_CALLBACK(gtk_widget_destroyed), NULL); g_signal_connect(app->window, "key-release-event", G_CALLBACK(key_event), NULL); gtk_window_set_icon(app->window,gdk_pixbuf_new_from_resource("/org/prozum/midiogre/midiogre_logo.png",&err)); /* Setup header bar */ header = gtk_header_bar_new(); gtk_header_bar_set_title (GTK_HEADER_BAR(header), "Midiogre"); gtk_window_set_titlebar(app->window, header); /* Setup close button */ button = gtk_button_new(); gtk_container_add (GTK_CONTAINER(button), gtk_image_new_from_resource("/org/prozum/midiogre/icons/window-close-symbolic.symbolic.png")); gtk_header_bar_pack_end(GTK_HEADER_BAR(header), button); g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_main_quit), app->window); /* Add seperator */ separator = gtk_separator_new(GTK_ORIENTATION_VERTICAL); gtk_header_bar_pack_end(GTK_HEADER_BAR(header), separator); /* Setup folder button */ button = gtk_button_new(); gtk_container_add (GTK_CONTAINER(button), gtk_image_new_from_resource("/org/prozum/midiogre/icons/document-open-symbolic.symbolic.png")); gtk_header_bar_pack_end(GTK_HEADER_BAR(header), button); g_signal_connect_swapped(button, "clicked", G_CALLBACK(folder_chooser), app->window); /* Global horizontal box */ app->win_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_container_add(GTK_CONTAINER(app->window), GTK_WIDGET(app->win_box)); /* Scroll container for sidepanel */ scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(app->win_box, scrolled, FALSE, FALSE, 0); /* Sidepanel box */ app->panel_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0)); gtk_container_add(GTK_CONTAINER (scrolled), GTK_WIDGET(app->panel_box)); gtk_container_set_border_width(GTK_CONTAINER(app->panel_box), 10); /* Frame with favorit info */ frame = gtk_frame_new("Favorite"); gtk_box_pack_start(app->panel_box, frame, FALSE, FALSE, 0); app->fav_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(app->fav_box)); /* Current favorite */ app->fav_title_label = GTK_LABEL(gtk_label_new("")); gtk_label_set_max_width_chars(app->fav_title_label, 20); gtk_label_set_width_chars(app->fav_title_label, 20); gtk_box_pack_start(app->fav_box, GTK_WIDGET(app->fav_title_label), FALSE, FALSE, 0); app->fav_artist_label = GTK_LABEL(gtk_label_new("No favorite selected!")); gtk_label_set_max_width_chars(app->fav_artist_label, 20); gtk_label_set_width_chars(app->fav_artist_label, 20); gtk_box_pack_start(app->fav_box, GTK_WIDGET(app->fav_artist_label), FALSE, FALSE, 0); app->fav_album_label = GTK_LABEL(gtk_label_new("")); gtk_label_set_max_width_chars(app->fav_album_label, 20); gtk_label_set_width_chars(app->fav_album_label, 20); gtk_box_pack_start(app->fav_box, GTK_WIDGET(app->fav_album_label), FALSE, FALSE, 0); /* Frame with search criteria widgets */ frame = gtk_frame_new("Search"); gtk_box_pack_start(app->panel_box, frame, FALSE, FALSE, 0); app->search_box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 10)); gtk_container_set_border_width(GTK_CONTAINER(app->search_box), 10); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(app->search_box)); /* Title entry */ frame = gtk_frame_new("Title"); gtk_box_pack_start(app->search_box, frame, FALSE, FALSE, 0); box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); gtk_container_set_border_width(GTK_CONTAINER(box), 10); app->title_entry = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(app->title_entry), TRUE, FALSE, 0); /* Artist entry */ frame = gtk_frame_new("Artist"); gtk_box_pack_start(app->search_box, frame, FALSE, FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(box), 10); box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); gtk_container_set_border_width(GTK_CONTAINER(box), 10); app->artist_entry = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(app->artist_entry), TRUE, FALSE, 0); /* Album entry */ frame = gtk_frame_new("Album"); gtk_box_pack_start(app->search_box, frame, FALSE, FALSE, 0); box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); gtk_container_set_border_width(GTK_CONTAINER(box), 10); app->album_entry = GTK_ENTRY(gtk_entry_new()); gtk_box_pack_start(box, GTK_WIDGET(app->album_entry), TRUE, FALSE, 0); /* Instrument class buttons */ frame = gtk_frame_new("Instrument Classes"); gtk_box_pack_start(app->search_box, frame, FALSE, FALSE, 0); app->instr_grid = GTK_GRID(gtk_grid_new()); #if GTK_MINOR_VERSION >= 12 gtk_widget_set_margin_start(GTK_WIDGET(app->instr_grid), 10); gtk_widget_set_margin_end(GTK_WIDGET(app->instr_grid), 10); #else gtk_widget_set_margin_left(GTK_WIDGET(app->instr_grid), 10); gtk_widget_set_margin_right(GTK_WIDGET(app->instr_grid), 10); #endif gtk_widget_set_margin_bottom(GTK_WIDGET(app->instr_grid), 10); gtk_widget_set_margin_top(GTK_WIDGET(app->instr_grid), 10); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(app->instr_grid)); for (i = 0; i < INSTR_CLASSES; i++) { label = gtk_label_new(instrument_classes[i]); gtk_widget_set_halign(GTK_WIDGET(label), GTK_ALIGN_START); gtk_grid_attach(app->instr_grid, label, 1, i + 1, 1, 1); app->instr_buttons[i] = GTK_CHECK_BUTTON(gtk_check_button_new()); gtk_widget_set_halign(GTK_WIDGET(app->instr_buttons[i]), GTK_ALIGN_END); gtk_grid_attach(app->instr_grid, GTK_WIDGET(app->instr_buttons[i]), 2, i + 1, 1, 1); } /* Result spinbutton */ frame = gtk_frame_new("Max result"); gtk_box_pack_start(app->search_box, frame, FALSE, FALSE, 0); box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0)); gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(box)); gtk_container_set_border_width(GTK_CONTAINER(box), 10); app->result_spinbutton = GTK_SPIN_BUTTON(gtk_spin_button_new_with_range(1, 100, 1)); gtk_spin_button_set_value(app->result_spinbutton, 25); gtk_box_pack_start(box, GTK_WIDGET(app->result_spinbutton), TRUE, TRUE, 0); /* Search button */ app->search_button = GTK_BUTTON(gtk_button_new_with_label("Search")); gtk_box_pack_start(app->search_box, GTK_WIDGET(app->search_button), FALSE, FALSE, 0); g_signal_connect_swapped(app->search_button, "clicked", G_CALLBACK(search_event), app); /* Songboxes notebook (Tabsview) */ app->song_notebook = GTK_NOTEBOOK(gtk_notebook_new()); gtk_widget_set_hexpand(GTK_WIDGET(app->song_notebook), TRUE); gtk_box_pack_start(app->win_box, GTK_WIDGET(app->song_notebook), TRUE, TRUE, 0); /* Add song boxes */ app->songboxes[SONGBOX_ALPHA] = songbox_new(app->song_notebook, "Alphabetical"); app->songboxes[SONGBOX_FPRNT] = songbox_new(app->song_notebook, "Fingerprint"); app->songboxes[SONGBOX_BEST] = songbox_new(app->song_notebook, "Best Match"); app->songboxes[SONGBOX_POP] = songbox_new(app->song_notebook, "Popularity"); app->songboxes[SONGBOX_NEW] = songbox_new(app->song_notebook, "Newest"); /* Show all widgets */ gtk_widget_show_all(GTK_WIDGET(app->window)); /* Allocate song queue */ app->songs[SONGBOX_ALPHA] = g_queue_new(); app->songs[SONGBOX_FPRNT] = g_queue_new(); app->songs[SONGBOX_BEST] = g_queue_new(); app->songs[SONGBOX_POP] = g_queue_new(); app->songs[SONGBOX_NEW] = g_queue_new(); return app; }
bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &pos, const wxSize &size, long style, const wxString &name ) { m_miniTitle = 0; if (style & wxCAPTION) m_miniTitle = 16; if (style & wxRESIZE_BORDER) m_miniEdge = 4; else m_miniEdge = 3; m_isDragging = false; m_oldX = -1; m_oldY = -1; m_diffX = 0; m_diffY = 0; // don't allow sizing smaller than decorations int minWidth = 2 * m_miniEdge; int minHeight = 2 * m_miniEdge + m_miniTitle; if (m_minWidth < minWidth) m_minWidth = minWidth; if (m_minHeight < minHeight) m_minHeight = minHeight; wxFrame::Create( parent, id, title, pos, size, style, name ); // Use a GtkEventBox for the title and borders. Using m_widget for this // almost works, except that setting the resize cursor has no effect. GtkWidget* eventbox = gtk_event_box_new(); gtk_widget_add_events(eventbox, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_widget_show(eventbox); #ifdef __WXGTK3__ g_object_ref(m_mainWidget); gtk_container_remove(GTK_CONTAINER(m_widget), m_mainWidget); gtk_container_add(GTK_CONTAINER(eventbox), m_mainWidget); g_object_unref(m_mainWidget); gtk_widget_set_margin_start(m_mainWidget, m_miniEdge); gtk_widget_set_margin_end(m_mainWidget, m_miniEdge); gtk_widget_set_margin_top(m_mainWidget, m_miniTitle + m_miniEdge); gtk_widget_set_margin_bottom(m_mainWidget, m_miniEdge); #else // Use a GtkAlignment to position m_mainWidget inside the decorations GtkWidget* alignment = gtk_alignment_new(0, 0, 1, 1); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), m_miniTitle + m_miniEdge, m_miniEdge, m_miniEdge, m_miniEdge); gtk_widget_show(alignment); // The GtkEventBox and GtkAlignment go between m_widget and m_mainWidget gtk_widget_reparent(m_mainWidget, alignment); gtk_container_add(GTK_CONTAINER(eventbox), alignment); #endif gtk_container_add(GTK_CONTAINER(m_widget), eventbox); m_gdkDecor = 0; gtk_window_set_decorated(GTK_WINDOW(m_widget), false); m_gdkFunc = 0; if (style & wxRESIZE_BORDER) m_gdkFunc = GDK_FUNC_RESIZE; gtk_window_set_default_size(GTK_WINDOW(m_widget), m_width, m_height); memset(&m_decorSize, 0, sizeof(m_decorSize)); m_deferShow = false; if (m_parent && (GTK_IS_WINDOW(m_parent->m_widget))) { gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) ); } if (m_miniTitle && (style & wxCLOSE_BOX)) { m_closeButton = wxBitmap((const char*)close_bits, 16, 16); m_closeButton.SetMask(new wxMask(m_closeButton)); } /* these are called when the borders are drawn */ #ifdef __WXGTK3__ g_signal_connect_after(eventbox, "draw", G_CALLBACK(draw), this); #else g_signal_connect_after(eventbox, "expose_event", G_CALLBACK(expose_event), this); #endif /* these are required for dragging the mini frame around */ g_signal_connect (eventbox, "button_press_event", G_CALLBACK (gtk_window_button_press_callback), this); g_signal_connect (eventbox, "button_release_event", G_CALLBACK (gtk_window_button_release_callback), this); g_signal_connect (eventbox, "motion_notify_event", G_CALLBACK (gtk_window_motion_notify_callback), this); g_signal_connect (eventbox, "leave_notify_event", G_CALLBACK (gtk_window_leave_callback), this); return true; }
static void photos_properties_dialog_constructed (GObject *object) { PhotosPropertiesDialog *self = PHOTOS_PROPERTIES_DIALOG (object); GApplication *app; g_autoptr (GDateTime) date_modified = NULL; GtkStyleContext *context; GtkWidget *author_w = NULL; GtkWidget *content_area; GtkWidget *date_created_w = NULL; GtkWidget *date_modified_data; GtkWidget *date_modified_w; GtkWidget *dimensions_w = NULL; GtkWidget *exposure_time_w = NULL; GtkWidget *flash_w = NULL; GtkWidget *fnumber_w = NULL; GtkWidget *focal_length_w = NULL; GtkWidget *iso_speed_w = NULL; GtkWidget *item_type; GtkWidget *item_type_data; GtkWidget *modified_w = NULL; GtkWidget *source; GtkWidget *source_data; GtkWidget *title; GQuark equipment; GQuark flash; PhotosBaseItem *item; PhotosSearchContextState *state; const gchar *author; const gchar *location; const gchar *name; const gchar *type_description; g_autofree gchar *date_created_str = NULL; g_autofree gchar *date_modified_str = NULL; gdouble exposure_time; gdouble fnumber; gdouble focal_length; gdouble iso_speed; gint64 ctime; gint64 mtime; glong height; glong width; G_OBJECT_CLASS (photos_properties_dialog_parent_class)->constructed (object); app = g_application_get_default (); state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app)); self->item_mngr = g_object_ref (state->item_mngr); { g_autoptr (GError) error = NULL; self->queue = photos_tracker_queue_dup_singleton (NULL, &error); if (G_UNLIKELY (error != NULL)) g_warning ("Unable to create PhotosTrackerQueue: %s", error->message); } item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (self->item_mngr, self->urn)); mtime = photos_base_item_get_mtime (item); date_modified = g_date_time_new_from_unix_local (mtime); date_modified_str = g_date_time_format (date_modified, "%c"); ctime = photos_base_item_get_date_created (item); if (ctime >= 0) { g_autoptr (GDateTime) date_created = NULL; date_created = g_date_time_new_from_unix_local (ctime); date_created_str = g_date_time_format (date_created, "%c"); } self->grid = gtk_grid_new (); gtk_widget_set_halign (self->grid, GTK_ALIGN_CENTER); gtk_widget_set_margin_start (self->grid, 24); gtk_widget_set_margin_end (self->grid, 24); gtk_widget_set_margin_bottom (self->grid, 12); gtk_widget_set_margin_top (self->grid, 12); gtk_orientable_set_orientation (GTK_ORIENTABLE (self->grid), GTK_ORIENTATION_VERTICAL); gtk_grid_set_column_homogeneous (GTK_GRID (self->grid), TRUE); gtk_grid_set_column_spacing (GTK_GRID (self->grid), 24); gtk_grid_set_row_homogeneous (GTK_GRID (self->grid), TRUE); gtk_grid_set_row_spacing (GTK_GRID (self->grid), 6); content_area = gtk_dialog_get_content_area (GTK_DIALOG (self)); gtk_box_pack_start (GTK_BOX (content_area), self->grid, TRUE, TRUE, 2); /* Translators: this is the label next to the photo title in the * properties dialog */ title = gtk_label_new (C_("Document Title", "Title")); gtk_widget_set_halign (title, GTK_ALIGN_END); context = gtk_widget_get_style_context (title); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), title); author = photos_base_item_get_author (item); if (author != NULL && author[0] != '\0') { /* Translators: this is the label next to the photo author in * the properties dialog */ author_w = gtk_label_new (C_("Document Author", "Author")); gtk_widget_set_halign (author_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (author_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), author_w); } source = gtk_label_new (_("Source")); gtk_widget_set_halign (source, GTK_ALIGN_END); context = gtk_widget_get_style_context (source); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), source); date_modified_w = gtk_label_new (_("Date Modified")); gtk_widget_set_halign (date_modified_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_modified_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), date_modified_w); if (date_created_str != NULL) { date_created_w = gtk_label_new (_("Date Created")); gtk_widget_set_halign (date_created_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_created_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), date_created_w); } /* Translators: this is the label next to the photo type in the * properties dialog */ item_type = gtk_label_new (C_("Document Type", "Type")); gtk_widget_set_halign (item_type, GTK_ALIGN_END); context = gtk_widget_get_style_context (item_type); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), item_type); height = (glong) photos_base_item_get_height (item); width = (glong) photos_base_item_get_width (item); if (height > 0 && width > 0) { dimensions_w = gtk_label_new (_("Dimensions")); gtk_widget_set_halign (dimensions_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (dimensions_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), dimensions_w); } location = photos_base_item_get_location (item); if (location != NULL && location[0] != '\0' && G_LIKELY (self->queue != NULL)) { g_autoptr (PhotosQuery) query = NULL; self->location_w = gtk_label_new (_("Location")); gtk_widget_set_halign (self->location_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (self->location_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), self->location_w); query = photos_query_builder_location_query (state, location); photos_tracker_queue_select (self->queue, query, NULL, photos_properties_dialog_location_query_executed, g_object_ref (self), g_object_unref); } equipment = photos_base_item_get_equipment (item); if (equipment != 0) { self->camera_w = gtk_label_new (_("Camera")); gtk_widget_set_halign (self->camera_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (self->camera_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), self->camera_w); } exposure_time = photos_base_item_get_exposure_time (item); if (exposure_time > 0.0) { exposure_time_w = gtk_label_new (_("Exposure")); gtk_widget_set_halign (exposure_time_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (exposure_time_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), exposure_time_w); } fnumber = photos_base_item_get_fnumber (item); if (fnumber > 0.0) { fnumber_w = gtk_label_new (_("Aperture")); gtk_widget_set_halign (fnumber_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (fnumber_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), fnumber_w); } focal_length = photos_base_item_get_focal_length (item); if (focal_length > 0.0) { focal_length_w = gtk_label_new (_("Focal Length")); gtk_widget_set_halign (focal_length_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (focal_length_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), focal_length_w); } iso_speed = photos_base_item_get_iso_speed (item); if (iso_speed > 0.0) { iso_speed_w = gtk_label_new (_("ISO Speed")); gtk_widget_set_halign (iso_speed_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (iso_speed_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), iso_speed_w); } flash = photos_base_item_get_flash (item); if (flash != 0) { flash_w = gtk_label_new (_("Flash")); gtk_widget_set_halign (flash_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (flash_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), flash_w); } if (!photos_base_item_is_collection (item)) { modified_w = gtk_label_new (_("Modifications")); gtk_widget_set_halign (modified_w, GTK_ALIGN_END); gtk_widget_set_valign (modified_w, GTK_ALIGN_BASELINE); gtk_widget_set_vexpand (modified_w, TRUE); context = gtk_widget_get_style_context (modified_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (self->grid), modified_w); } name = photos_base_item_get_name (item); if (PHOTOS_IS_LOCAL_ITEM (item)) { self->title_entry = gtk_entry_new (); gtk_widget_set_halign (self->title_entry, GTK_ALIGN_START); gtk_widget_set_hexpand (self->title_entry, TRUE); gtk_entry_set_activates_default (GTK_ENTRY (self->title_entry), TRUE); gtk_entry_set_text (GTK_ENTRY (self->title_entry), name); gtk_entry_set_width_chars (GTK_ENTRY (self->title_entry), 40); gtk_editable_set_editable (GTK_EDITABLE (self->title_entry), TRUE); g_signal_connect (self->title_entry, "changed", G_CALLBACK (photos_properties_dialog_title_entry_changed), self); } else { self->title_entry = gtk_label_new (name); gtk_widget_set_halign (self->title_entry, GTK_ALIGN_START); gtk_label_set_ellipsize (GTK_LABEL (self->title_entry), PANGO_ELLIPSIZE_END); gtk_label_set_max_width_chars (GTK_LABEL (self->title_entry), 40); } gtk_grid_attach_next_to (GTK_GRID (self->grid), self->title_entry, title, GTK_POS_RIGHT, 2, 1); if (author_w != NULL) { GtkWidget *author_data; author_data = gtk_label_new (author); gtk_widget_set_halign (author_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), author_data, author_w, GTK_POS_RIGHT, 2, 1); } source_data = photos_base_item_get_source_widget (item); gtk_grid_attach_next_to (GTK_GRID (self->grid), source_data, source, GTK_POS_RIGHT, 2, 1); date_modified_data = gtk_label_new (date_modified_str); gtk_widget_set_halign (date_modified_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), date_modified_data, date_modified_w, GTK_POS_RIGHT, 2, 1); if (date_created_w != NULL) { GtkWidget *date_created_data; date_created_data = gtk_label_new (date_created_str); gtk_widget_set_halign (date_created_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), date_created_data, date_created_w, GTK_POS_RIGHT, 2, 1); } type_description = photos_base_item_get_type_description (item); item_type_data = gtk_label_new (type_description); gtk_widget_set_halign (item_type_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), item_type_data, item_type, GTK_POS_RIGHT, 2, 1); if (dimensions_w != NULL) { GtkWidget *dims_data; g_autofree gchar *dims_str = NULL; gulong n = (gulong) height; dims_str = g_strdup_printf (ngettext ("%ld × %ld pixel", "%ld × %ld pixels", n), width, height); dims_data = gtk_label_new (dims_str); gtk_widget_set_halign (dims_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), dims_data, dimensions_w, GTK_POS_RIGHT, 2, 1); } if (self->camera_w != NULL) { photos_camera_cache_get_camera_async (self->camera_cache, equipment, self->cancellable, photos_properties_dialog_get_camera, self); } if (exposure_time_w != NULL) { GtkWidget *exposure_time_data; g_autofree gchar *exposure_time_str = NULL; exposure_time_str = g_strdup_printf ("%.3lf sec", exposure_time); exposure_time_data = gtk_label_new (exposure_time_str); gtk_widget_set_halign (exposure_time_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), exposure_time_data, exposure_time_w, GTK_POS_RIGHT, 2, 1); } if (fnumber_w != NULL) { GtkWidget *fnumber_data; g_autofree gchar *fnumber_str = NULL; fnumber_str = g_strdup_printf ("f/%.1lf", fnumber); fnumber_data = gtk_label_new (fnumber_str); gtk_widget_set_halign (fnumber_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), fnumber_data, fnumber_w, GTK_POS_RIGHT, 2, 1); } if (focal_length_w != NULL) { GtkWidget *focal_length_data; g_autofree gchar *focal_length_str = NULL; focal_length_str = g_strdup_printf ("%.0lf mm", focal_length); focal_length_data = gtk_label_new (focal_length_str); gtk_widget_set_halign (focal_length_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), focal_length_data, focal_length_w, GTK_POS_RIGHT, 2, 1); } if (iso_speed_w != NULL) { GtkWidget *iso_speed_data; g_autofree gchar *iso_speed_str = NULL; iso_speed_str = g_strdup_printf ("%.0lf", iso_speed); iso_speed_data = gtk_label_new (iso_speed_str); gtk_widget_set_halign (iso_speed_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), iso_speed_data, iso_speed_w, GTK_POS_RIGHT, 2, 1); } if (flash_w != NULL) { GtkWidget *flash_data; g_autofree gchar *flash_str = NULL; if (flash == PHOTOS_FLASH_OFF) flash_str = g_strdup (_("Off, did not fire")); else if (flash == PHOTOS_FLASH_ON) flash_str = g_strdup (_("On, fired")); else { const gchar *str; str = g_quark_to_string (flash); g_warning ("Unknown value for nmm:flash: %s", str); } flash_data = gtk_label_new (flash_str); gtk_widget_set_halign (flash_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (self->grid), flash_data, flash_w, GTK_POS_RIGHT, 2, 1); } if (modified_w != NULL) { GtkWidget *modified_grid; photos_base_item_pipeline_is_edited_async (item, self->cancellable, photos_properties_dialog_pipeline_is_edited, self); modified_grid = gtk_grid_new (); gtk_widget_set_hexpand (modified_grid, TRUE); gtk_orientable_set_orientation (GTK_ORIENTABLE (modified_grid), GTK_ORIENTATION_HORIZONTAL); self->modified_data = gtk_label_new (NULL); gtk_widget_set_halign (self->modified_data, GTK_ALIGN_START); gtk_widget_set_hexpand (self->modified_data, TRUE); gtk_widget_set_no_show_all (self->modified_data, TRUE); gtk_widget_set_valign (self->modified_data, GTK_ALIGN_BASELINE); gtk_widget_set_vexpand (self->modified_data, TRUE); context = gtk_widget_get_style_context (self->modified_data); gtk_style_context_add_class (context, "photos-fade-out"); gtk_container_add (GTK_CONTAINER (modified_grid), self->modified_data); self->revert_button = gtk_button_new_with_label (_("Discard all Edits")); gtk_widget_set_halign (self->revert_button, GTK_ALIGN_END); gtk_widget_set_hexpand (self->revert_button, TRUE); gtk_widget_set_no_show_all (self->revert_button, TRUE); context = gtk_widget_get_style_context (self->revert_button); gtk_style_context_add_class (context, "destructive-action"); gtk_style_context_add_class (context, "photos-fade-out"); gtk_container_add (GTK_CONTAINER (modified_grid), self->revert_button); g_signal_connect_swapped (self->revert_button, "clicked", G_CALLBACK (photos_properties_dialog_revert_clicked), self); gtk_grid_attach_next_to (GTK_GRID (self->grid), modified_grid, modified_w, GTK_POS_RIGHT, 2, 1); } }
static NimfSettingsPage * nimf_settings_page_new (NimfSettings *nsettings, const gchar *schema_id) { NimfSettingsPage *page; GSettingsSchema *schema; GList *key_list = NULL; gchar **keys; GList *l; gint i; page = g_slice_new0 (NimfSettingsPage); page->gsettings = g_settings_new (schema_id); page->label = nimf_settings_page_build_label (page, schema_id); page->box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 15); page->page_keys = g_ptr_array_new_with_free_func ((GDestroyNotify) nimf_settings_page_key_free); #if GTK_CHECK_VERSION (3, 12, 0) gtk_widget_set_margin_start (page->box, 15); gtk_widget_set_margin_end (page->box, 15); #else gtk_widget_set_margin_left (page->box, 15); gtk_widget_set_margin_right (page->box, 15); #endif gtk_widget_set_margin_top (page->box, 15); gtk_widget_set_margin_bottom (page->box, 15); schema = g_settings_schema_source_lookup (nsettings->schema_source, schema_id, TRUE); #if GLIB_CHECK_VERSION (2, 46, 0) keys = g_settings_schema_list_keys (schema); #else keys = g_settings_list_keys (page->gsettings); #endif for (i = 0; keys[i] != NULL; i++) key_list = g_list_prepend (key_list, keys[i]); key_list = g_list_sort (key_list, (GCompareFunc) on_comparison); for (i = 0, l = key_list; l != NULL; l = l->next, i++) { GVariant *variant; GSettingsSchemaKey *schema_key = NULL; NimfSettingsPageKey *page_key; const GVariantType *type; const gchar *key; const gchar *summary; const gchar *desc; key = l->data; if (g_str_has_prefix (key, "hidden-")) continue; variant = g_settings_get_value (page->gsettings, key); type = g_variant_get_type (variant); schema_key = g_settings_schema_get_key (schema, key); summary = g_settings_schema_key_get_summary (schema_key); desc = g_settings_schema_key_get_description (schema_key); page_key = nimf_settings_page_key_new (page->gsettings, key, summary, desc); g_ptr_array_add (page->page_keys, page_key); if (g_variant_type_equal (type, G_VARIANT_TYPE_BOOLEAN)) { GtkWidget *item; item = nimf_settings_page_key_build_boolean (page_key); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING)) { GtkWidget *item; item = nimf_settings_page_key_build_string (page_key, schema_id, key_list); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else if (g_variant_type_equal (type, G_VARIANT_TYPE_STRING_ARRAY)) { GtkWidget *item; item = nimf_settings_page_key_build_string_array (page_key); gtk_box_pack_start (GTK_BOX (page->box), item, FALSE, FALSE, 0); } else g_error (G_STRLOC ": %s: not supported variant type: \"%s\"", G_STRFUNC, (gchar *) type); g_settings_schema_key_unref (schema_key); g_variant_unref (variant); } g_strfreev (keys); g_list_free (key_list); g_settings_schema_unref (schema); return page; }
static GtkWidget * nimf_settings_page_key_build_string_array (NimfSettingsPageKey *page_key) { GtkListStore *store; GtkWidget *treeview; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *scrolled_w; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *button1; GtkWidget *button2; gchar **strv; gchar *detailed_signal; GtkTreeIter iter; gint j; button1 = gtk_button_new_from_icon_name ("list-add", GTK_ICON_SIZE_SMALL_TOOLBAR); button2 = gtk_button_new_from_icon_name ("list-remove", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_button_set_relief (GTK_BUTTON (button1), GTK_RELIEF_NONE); gtk_button_set_relief (GTK_BUTTON (button2), GTK_RELIEF_NONE); hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); #if GTK_CHECK_VERSION (3, 12, 0) gtk_widget_set_margin_end (page_key->label, 15); #else gtk_widget_set_margin_right (page_key->label, 15); #endif gtk_box_pack_start (GTK_BOX (hbox), page_key->label, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (hbox), button2, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (hbox), button1, FALSE, FALSE, 0); store = gtk_list_store_new (1, G_TYPE_STRING); strv = g_settings_get_strv (page_key->gsettings, page_key->key); for (j = 0; strv[j] != NULL; j++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, strv[j], -1); } treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); g_object_unref (store); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Hotkeys", renderer, "text", 0, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE); scrolled_w = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_w), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_w), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_container_add (GTK_CONTAINER (scrolled_w), treeview); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (vbox), scrolled_w, FALSE, FALSE, 0); page_key->treeview = treeview; detailed_signal = g_strdup_printf ("changed::%s", page_key->key); g_signal_connect (treeview, "realize", G_CALLBACK (on_tree_view_realize), scrolled_w); g_signal_connect (button1, "clicked", G_CALLBACK (on_button_clicked_add), page_key); g_signal_connect (button2, "clicked", G_CALLBACK (on_button_clicked_remove), page_key); g_signal_connect (page_key->gsettings, detailed_signal, G_CALLBACK (on_gsettings_changed), page_key->treeview); g_strfreev (strv); g_free (detailed_signal); return vbox; }
static void _lib_geotagging_show_offset_window(GtkWidget *widget, dt_lib_module_t *self) { dt_lib_geotagging_t *d = self->data; gint x, y; gint px, py, center_w, center_h, window_w, window_h; GtkWidget *window = dt_ui_main_window(darktable.gui->ui); GtkWidget *center = dt_ui_center(darktable.gui->ui); gdk_window_get_origin(gtk_widget_get_window(center), &px, &py); center_w = gdk_window_get_width(gtk_widget_get_window(center)); center_h = gdk_window_get_height(gtk_widget_get_window(center)); d->floating_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_can_focus(d->floating_window, TRUE); gtk_window_set_decorated(GTK_WINDOW(d->floating_window), FALSE); gtk_window_set_type_hint(GTK_WINDOW(d->floating_window), GDK_WINDOW_TYPE_HINT_POPUP_MENU); gtk_window_set_transient_for(GTK_WINDOW(d->floating_window), GTK_WINDOW(window)); gtk_widget_set_opacity(d->floating_window, 0.8); gtk_window_set_modal(GTK_WINDOW(d->floating_window), TRUE); GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); gtk_widget_set_margin_top(vbox, DT_PIXEL_APPLY_DPI(2)); gtk_widget_set_margin_bottom(vbox, DT_PIXEL_APPLY_DPI(5)); gtk_widget_set_margin_start(vbox, DT_PIXEL_APPLY_DPI(5)); gtk_widget_set_margin_end(vbox, DT_PIXEL_APPLY_DPI(5)); gtk_container_add(GTK_CONTAINER(d->floating_window), vbox); d->floating_window_entry = gtk_entry_new(); gtk_widget_add_events(d->floating_window_entry, GDK_FOCUS_CHANGE_MASK); g_signal_connect_swapped(d->floating_window, "focus-out-event", G_CALLBACK(gtk_widget_destroy), d->floating_window); gtk_widget_set_tooltip_text(d->floating_window_entry, _("enter the time shown on the selected picture\nformat: hh:mm:ss")); gtk_editable_select_region(GTK_EDITABLE(d->floating_window_entry), 0, -1); gtk_box_pack_start(GTK_BOX(vbox), d->floating_window_entry, TRUE, TRUE, 0); g_signal_connect(d->floating_window_entry, "key-press-event", G_CALLBACK(_lib_geotagging_floating_key_press), self); GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); GtkWidget *cancel_button = gtk_button_new_with_label(_("cancel")); GtkWidget *ok_button = gtk_button_new_with_label(_("ok")); gtk_box_pack_start(GTK_BOX(hbox), cancel_button, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), ok_button, TRUE, TRUE, 0); g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked", G_CALLBACK(gtk_widget_destroy), d->floating_window); g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(_lib_geotagging_calculate_offset_callback), self); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); gtk_widget_show_all(d->floating_window); gtk_widget_grab_focus(d->floating_window_entry); window_w = gdk_window_get_width(gtk_widget_get_window(d->floating_window)); window_h = gdk_window_get_height(gtk_widget_get_window(d->floating_window)); x = px + 0.5 * (center_w - window_w); y = py + center_h - 20 - window_h; gtk_window_move(GTK_WINDOW(d->floating_window), x, y); gtk_window_present(GTK_WINDOW(d->floating_window)); }
static void photos_properties_dialog_constructed (GObject *object) { PhotosPropertiesDialog *self = PHOTOS_PROPERTIES_DIALOG (object); PhotosPropertiesDialogPrivate *priv = self->priv; GDateTime *date_modified; GtkStyleContext *context; GtkWidget *author_w = NULL; GtkWidget *content_area; GtkWidget *date_created_w = NULL; GtkWidget *date_modified_data; GtkWidget *date_modified_w; GtkWidget *exposure_time_w = NULL; GtkWidget *flash_w = NULL; GtkWidget *fnumber_w = NULL; GtkWidget *focal_length_w = NULL; GtkWidget *height_w = NULL; GtkWidget *iso_speed_w = NULL; GtkWidget *item_type; GtkWidget *item_type_data; GtkWidget *source; GtkWidget *source_data; GtkWidget *title; GtkWidget *width_w = NULL; GQuark equipment; GQuark flash; PhotosBaseItem *item; const gchar *author; const gchar *name; const gchar *type_description; gchar *date_created_str = NULL; gchar *date_modified_str; gdouble exposure_time; gdouble fnumber; gdouble focal_length; gdouble iso_speed; gint64 ctime; gint64 height; gint64 mtime; gint64 width; G_OBJECT_CLASS (photos_properties_dialog_parent_class)->constructed (object); item = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (priv->item_mngr, priv->urn)); mtime = photos_base_item_get_mtime (item); date_modified = g_date_time_new_from_unix_local (mtime); date_modified_str = g_date_time_format (date_modified, "%c"); g_date_time_unref (date_modified); ctime = photos_base_item_get_date_created (item); if (ctime != -1) { GDateTime *date_created; date_created = g_date_time_new_from_unix_local (ctime); date_created_str = g_date_time_format (date_created, "%c"); g_date_time_unref (date_created); } priv->grid = gtk_grid_new (); gtk_widget_set_halign (priv->grid, GTK_ALIGN_CENTER); gtk_widget_set_margin_start (priv->grid, 24); gtk_widget_set_margin_end (priv->grid, 24); gtk_widget_set_margin_bottom (priv->grid, 12); gtk_widget_set_margin_top (priv->grid, 12); gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->grid), GTK_ORIENTATION_VERTICAL); gtk_grid_set_column_homogeneous (GTK_GRID (priv->grid), TRUE); gtk_grid_set_column_spacing (GTK_GRID (priv->grid), 24); gtk_grid_set_row_homogeneous (GTK_GRID (priv->grid), TRUE); gtk_grid_set_row_spacing (GTK_GRID (priv->grid), 6); content_area = gtk_dialog_get_content_area (GTK_DIALOG (self)); gtk_box_pack_start (GTK_BOX (content_area), priv->grid, TRUE, TRUE, 2); /* Translators: this is the label next to the photo title in the * properties dialog */ title = gtk_label_new (C_("Document Title", "Title")); gtk_widget_set_halign (title, GTK_ALIGN_END); context = gtk_widget_get_style_context (title); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), title); author = photos_base_item_get_author (item); if (author != NULL && author[0] != '\0') { /* Translators: this is the label next to the photo author in * the properties dialog */ author_w = gtk_label_new (C_("Document Author", "Author")); gtk_widget_set_halign (author_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (author_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), author_w); } source = gtk_label_new (_("Source")); gtk_widget_set_halign (source, GTK_ALIGN_END); context = gtk_widget_get_style_context (source); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), source); date_modified_w = gtk_label_new (_("Date Modified")); gtk_widget_set_halign (date_modified_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_modified_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), date_modified_w); if (date_created_str != NULL) { date_created_w = gtk_label_new (_("Date Created")); gtk_widget_set_halign (date_created_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (date_created_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), date_created_w); } /* Translators: this is the label next to the photo type in the * properties dialog */ item_type = gtk_label_new (C_("Document Type", "Type")); gtk_widget_set_halign (item_type, GTK_ALIGN_END); context = gtk_widget_get_style_context (item_type); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), item_type); width = photos_base_item_get_width (item); if (width > 0) { width_w = gtk_label_new (_("Width")); gtk_widget_set_halign (width_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (width_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), width_w); } height = photos_base_item_get_height (item); if (height > 0) { height_w = gtk_label_new (_("Height")); gtk_widget_set_halign (height_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (height_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), height_w); } equipment = photos_base_item_get_equipment (item); photos_camera_cache_get_camera_async (priv->camera_cache, equipment, priv->cancellable, photos_properties_dialog_get_camera, self); if (equipment != 0) { priv->camera_w = gtk_label_new (_("Camera")); gtk_widget_set_halign (priv->camera_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (priv->camera_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), priv->camera_w); } exposure_time = photos_base_item_get_exposure_time (item); if (exposure_time > 0.0) { exposure_time_w = gtk_label_new (_("Exposure")); gtk_widget_set_halign (exposure_time_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (exposure_time_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), exposure_time_w); } fnumber = photos_base_item_get_fnumber (item); if (fnumber > 0.0) { fnumber_w = gtk_label_new (_("Aperture")); gtk_widget_set_halign (fnumber_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (fnumber_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), fnumber_w); } focal_length = photos_base_item_get_focal_length (item); if (focal_length > 0.0) { focal_length_w = gtk_label_new (_("Focal Length")); gtk_widget_set_halign (focal_length_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (focal_length_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), focal_length_w); } iso_speed = photos_base_item_get_iso_speed (item); if (iso_speed > 0.0) { iso_speed_w = gtk_label_new (_("ISO Speed")); gtk_widget_set_halign (iso_speed_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (iso_speed_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), iso_speed_w); } flash = photos_base_item_get_flash (item); if (flash != 0) { flash_w = gtk_label_new (_("Flash")); gtk_widget_set_halign (flash_w, GTK_ALIGN_END); context = gtk_widget_get_style_context (flash_w); gtk_style_context_add_class (context, "dim-label"); gtk_container_add (GTK_CONTAINER (priv->grid), flash_w); } name = photos_base_item_get_name (item); if (PHOTOS_IS_LOCAL_ITEM (item)) { priv->title_entry = gtk_entry_new (); gtk_widget_set_halign (priv->title_entry, GTK_ALIGN_START); gtk_widget_set_hexpand (priv->title_entry, TRUE); gtk_entry_set_activates_default (GTK_ENTRY (priv->title_entry), TRUE); gtk_entry_set_text (GTK_ENTRY (priv->title_entry), name); gtk_entry_set_width_chars (GTK_ENTRY (priv->title_entry), 40); gtk_editable_set_editable (GTK_EDITABLE (priv->title_entry), TRUE); g_signal_connect (priv->title_entry, "changed", G_CALLBACK (photos_properties_dialog_title_entry_changed), self); } else { priv->title_entry = gtk_label_new (name); gtk_widget_set_halign (priv->title_entry, GTK_ALIGN_START); } gtk_grid_attach_next_to (GTK_GRID (priv->grid), priv->title_entry, title, GTK_POS_RIGHT, 2, 1); if (author_w != NULL) { GtkWidget *author_data; author_data = gtk_label_new (author); gtk_widget_set_halign (author_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), author_data, author_w, GTK_POS_RIGHT, 2, 1); } if (PHOTOS_IS_FACEBOOK_ITEM (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_link_button_new_with_label ("https://www.facebook.com/", source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else if (PHOTOS_IS_FLICKR_ITEM (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_link_button_new_with_label ("https://www.flickr.com/", source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else /* local item */ { if (photos_base_item_is_collection (item)) { const gchar *source_name; source_name = photos_base_item_get_source_name (item); source_data = gtk_label_new (source_name); gtk_widget_set_halign (source_data, GTK_ALIGN_START); } else { GFile *file; GFile *source_link; GtkWidget *label; const gchar *uri; gchar *source_path; gchar *source_uri; uri = photos_base_item_get_uri (item); file = g_file_new_for_uri (uri); source_link = g_file_get_parent (file); source_path = g_file_get_path (source_link); source_uri = g_file_get_uri (source_link); source_data = gtk_link_button_new_with_label (source_uri, source_path); gtk_widget_set_halign (source_data, GTK_ALIGN_START); label = gtk_bin_get_child (GTK_BIN (source_data)); gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); g_object_unref (source_link); g_object_unref (file); } } gtk_grid_attach_next_to (GTK_GRID (priv->grid), source_data, source, GTK_POS_RIGHT, 2, 1); date_modified_data = gtk_label_new (date_modified_str); gtk_widget_set_halign (date_modified_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), date_modified_data, date_modified_w, GTK_POS_RIGHT, 2, 1); if (date_created_w != NULL) { GtkWidget *date_created_data; date_created_data = gtk_label_new (date_created_str); gtk_widget_set_halign (date_created_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), date_created_data, date_created_w, GTK_POS_RIGHT, 2, 1); } type_description = photos_base_item_get_type_description (item); item_type_data = gtk_label_new (type_description); gtk_widget_set_halign (item_type_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), item_type_data, item_type, GTK_POS_RIGHT, 2, 1); if (width_w != NULL) { GtkWidget *width_data; gchar *width_str; width_str = g_strdup_printf ("%"G_GINT64_FORMAT" pixels", width); width_data = gtk_label_new (width_str); gtk_widget_set_halign (width_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), width_data, width_w, GTK_POS_RIGHT, 2, 1); g_free (width_str); } if (height_w != NULL) { GtkWidget *height_data; gchar *height_str; height_str = g_strdup_printf ("%"G_GINT64_FORMAT" pixels", height); height_data = gtk_label_new (height_str); gtk_widget_set_halign (height_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), height_data, height_w, GTK_POS_RIGHT, 2, 1); g_free (height_str); } if (exposure_time_w != NULL) { GtkWidget *exposure_time_data; gchar *exposure_time_str; exposure_time_str = g_strdup_printf ("%.3lf sec", exposure_time); exposure_time_data = gtk_label_new (exposure_time_str); gtk_widget_set_halign (exposure_time_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), exposure_time_data, exposure_time_w, GTK_POS_RIGHT, 2, 1); g_free (exposure_time_str); } if (fnumber_w != NULL) { GtkWidget *fnumber_data; gchar *fnumber_str; fnumber_str = g_strdup_printf ("f/%.1lf", fnumber); fnumber_data = gtk_label_new (fnumber_str); gtk_widget_set_halign (fnumber_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), fnumber_data, fnumber_w, GTK_POS_RIGHT, 2, 1); g_free (fnumber_str); } if (focal_length_w != NULL) { GtkWidget *focal_length_data; gchar *focal_length_str; focal_length_str = g_strdup_printf ("%.0lf mm", focal_length); focal_length_data = gtk_label_new (focal_length_str); gtk_widget_set_halign (focal_length_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), focal_length_data, focal_length_w, GTK_POS_RIGHT, 2, 1); g_free (focal_length_str); } if (iso_speed_w != NULL) { GtkWidget *iso_speed_data; gchar *iso_speed_str; iso_speed_str = g_strdup_printf ("%.0lf", iso_speed); iso_speed_data = gtk_label_new (iso_speed_str); gtk_widget_set_halign (iso_speed_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), iso_speed_data, iso_speed_w, GTK_POS_RIGHT, 2, 1); g_free (iso_speed_str); } if (flash_w != NULL) { GtkWidget *flash_data; gchar *flash_str; if (flash == PHOTOS_FLASH_OFF) flash_str = g_strdup (_("Off, did not fire")); else if (flash == PHOTOS_FLASH_ON) flash_str = g_strdup (_("On, fired")); else g_assert_not_reached (); flash_data = gtk_label_new (flash_str); gtk_widget_set_halign (flash_data, GTK_ALIGN_START); gtk_grid_attach_next_to (GTK_GRID (priv->grid), flash_data, flash_w, GTK_POS_RIGHT, 2, 1); g_free (flash_str); } g_free (date_created_str); g_free (date_modified_str); }