NoticeView *noticeview_create(MainWindow *mainwin) { NoticeView *noticeview; GtkWidget *vbox; GtkWidget *hsep; GtkWidget *hbox; GtkWidget *icon; GtkWidget *text; GtkWidget *widget; GtkWidget *widget2; GtkWidget *evtbox; debug_print("Creating notice view...\n"); noticeview = g_new0(NoticeView, 1); if (!hand_cursor) hand_cursor = gdk_cursor_new(GDK_HAND2); noticeview->window = mainwin->window; vbox = gtk_vbox_new(FALSE, 4); gtk_widget_show(vbox); hsep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, TRUE, 1); hbox = gtk_hbox_new(FALSE, 4); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 1); evtbox = gtk_event_box_new(); gtk_event_box_set_visible_window(GTK_EVENT_BOX(evtbox), FALSE); gtk_widget_show(evtbox); icon = stock_pixmap_widget(noticeview->window, STOCK_PIXMAP_NOTICE_WARN); gtk_widget_show(icon); g_signal_connect(G_OBJECT(evtbox), "button-press-event", G_CALLBACK(noticeview_icon_pressed), (gpointer) noticeview); g_signal_connect(G_OBJECT(evtbox), "motion-notify-event", G_CALLBACK(noticeview_visi_notify), noticeview); g_signal_connect(G_OBJECT(evtbox), "leave-notify-event", G_CALLBACK(noticeview_leave_notify), noticeview); g_signal_connect(G_OBJECT(evtbox), "enter-notify-event", G_CALLBACK(noticeview_enter_notify), noticeview); gtk_container_add(GTK_CONTAINER(evtbox), icon); gtk_box_pack_start(GTK_BOX(hbox), evtbox, FALSE, TRUE, 0); text = gtk_label_new(""); gtk_widget_show(text); gtk_box_pack_start(GTK_BOX(hbox), text, FALSE, FALSE, 0); widget = gtk_button_new_with_label(""); g_signal_connect(G_OBJECT(widget), "clicked", G_CALLBACK(noticeview_button_pressed), (gpointer) noticeview); gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 4); widget2 = gtk_button_new_with_label(""); g_signal_connect(G_OBJECT(widget2), "clicked", G_CALLBACK(noticeview_2ndbutton_pressed), (gpointer) noticeview); gtk_box_pack_start(GTK_BOX(hbox), widget2, FALSE, FALSE, 0); noticeview->vbox = vbox; noticeview->hsep = hsep; noticeview->hbox = hbox; noticeview->icon = icon; noticeview->text = text; noticeview->button = widget; noticeview->button2= widget2; noticeview->evtbox = evtbox; noticeview->visible= TRUE; #if !(GTK_CHECK_VERSION(2,12,0)) noticeview->tooltips = tips; #endif return noticeview; }
/** * \brief Get a widget showing one icon with another overlaid on top of it. * * The base icon is always centralised, the other icon can be positioned. * The overlay icon is ignored if pos=OVERLAY_NONE is used * * \param window top-level window widget * \param icon the base icon * \param overlay the icon to overlay * \param pos how to align the overlay widget, or OVERLAY_NONE for no overlay * \param border_x size of the border around the base icon (left and right) * \param border_y size of the border around the base icon (top and bottom) */ GtkWidget *stock_pixmap_widget_with_overlay(StockPixmap icon, StockPixmap overlay, OverlayPosition pos, gint border_x, gint border_y) { cairo_surface_t *stock_pixmap = NULL; GdkPixbuf *stock_pixbuf = NULL; GtkWidget *widget = NULL; GtkWidget *stock_wid = NULL; GtkRequisition requisition; OverlayData *data = NULL; data = g_new0(OverlayData, 1); stock_wid = stock_pixmap_widget(icon); gtk_widget_get_requisition(stock_wid, &requisition); #if !GTK_CHECK_VERSION(3, 0, 0) if (gtk_image_get_storage_type(GTK_IMAGE(stock_wid)) == GTK_IMAGE_PIXMAP) data->is_pixmap = TRUE; else #endif data->is_pixmap = FALSE; if (data->is_pixmap) { cairo_t *cr = gdk_cairo_create(gtk_widget_get_window(stock_wid)); stock_pixmap = cairo_get_target(cr); cairo_surface_reference(stock_pixmap); cairo_destroy(cr); data->base_pixmap = stock_pixmap; data->base_height = requisition.height; data->base_width = requisition.width; gtk_widget_destroy(stock_wid); if (pos == OVERLAY_NONE) { data->overlay_pixmap = NULL; } else { stock_wid = stock_pixmap_widget(overlay); cr = gdk_cairo_create(gtk_widget_get_window(stock_wid)); stock_pixmap = cairo_get_target(cr); cairo_surface_reference(stock_pixmap); cairo_destroy(cr); data->overlay_pixmap = stock_pixmap; data->overlay_height = requisition.height; data->overlay_width = requisition.width; gtk_widget_destroy(stock_wid); } } else { data->is_pixmap = FALSE; stock_pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(stock_wid)); g_object_ref(stock_pixbuf); data->base_pixbuf = stock_pixbuf; data->base_height = requisition.height; data->base_width = requisition.width; gtk_widget_destroy(stock_wid); if (pos == OVERLAY_NONE) { data->overlay_pixmap = NULL; } else { stock_wid = stock_pixmap_widget(overlay); stock_pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(stock_wid)); g_object_ref(stock_pixbuf); data->overlay_pixbuf = stock_pixbuf; data->overlay_height = requisition.height; data->overlay_width = requisition.width; gtk_widget_destroy(stock_wid); } } data->position = pos; data->border_x = border_x; data->border_y = border_y; data->highlight = FALSE; widget = gtk_drawing_area_new(); gtk_widget_set_size_request(widget, data->base_width + border_x * 2, data->base_height + border_y * 2); #if !GTK_CHECK_VERSION(3, 0, 0) g_signal_connect(G_OBJECT(widget), "expose_event", G_CALLBACK(pixmap_with_overlay_expose_event_cb), data); #else g_signal_connect(G_OBJECT(widget), "draw", G_CALLBACK(pixmap_with_overlay_expose_event_cb), data); #endif g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(pixmap_with_overlay_destroy_cb), data); g_object_set_data(G_OBJECT(widget), "highlight", &(data->highlight)); return widget; }
static void about_create(void) { GtkWidget *vbox1; GtkWidget *image; GtkWidget *vbox2; GtkWidget *label; GtkWidget *button; GtkWidget *scrolledwin; GtkWidget *notebook; GtkWidget *table; char *markup; GtkWidget *confirm_area; GtkWidget *close_button; static GdkGeometry geometry; stats_text_buffer = NULL; window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "about"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_title(GTK_WINDOW(window), _("About Claws Mail")); gtk_container_set_border_width(GTK_CONTAINER(window), 8); gtk_widget_set_size_request(window, -1, -1); g_signal_connect(G_OBJECT(window), "size_allocate", G_CALLBACK(about_size_allocate_cb), NULL); g_signal_connect(G_OBJECT(window), "size_allocate", G_CALLBACK(about_size_allocate_cb), NULL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_widget_hide_on_delete), NULL); g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(key_pressed), NULL); if (!geometry.min_width) { geometry.min_width = 450; geometry.min_height = 500; } gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry, GDK_HINT_MIN_SIZE); gtk_window_set_default_size(GTK_WINDOW(window), prefs_common.aboutwin_width, prefs_common.aboutwin_height); gtk_widget_realize(window); vbox1 = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox1); table = gtk_table_new (2, 1, FALSE); gtk_box_pack_start(GTK_BOX(vbox1), table, FALSE, FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (table), 8); gtk_table_set_row_spacings (GTK_TABLE (table), 8); gtk_table_set_col_spacings (GTK_TABLE (table), 8); image = stock_pixmap_widget(window, STOCK_PIXMAP_CLAWS_MAIL_LOGO); gtk_table_attach (GTK_TABLE (table), image, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); vbox2 = gtk_vbox_new (FALSE, 4); gtk_table_attach (GTK_TABLE (table), vbox2, 1, 2, 0, 1, (GtkAttachOptions) (GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); label = gtk_label_new(""); gtk_label_set_selectable(GTK_LABEL(label), TRUE); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); markup = g_markup_printf_escaped ("<span weight=\"bold\" size=\"xx-large\">Claws Mail</span>\nversion %s", VERSION_GIT_FULL); gtk_label_set_markup(GTK_LABEL(label), markup); g_free(markup); button = gtkut_get_link_btn(window, HOMEPAGE_URI, " "HOMEPAGE_URI" "); gtk_box_pack_start(GTK_BOX(vbox2), button, FALSE, FALSE, 0); #ifndef GENERIC_UMPC label = gtk_label_new (_("Copyright (C) 1999-2016\nThe Claws Mail Team\n" "and Hiroyuki Yamamoto")); gtk_label_set_selectable(GTK_LABEL(label), TRUE); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0); #endif notebook = gtk_notebook_new(); gtk_widget_set_size_request(notebook, -1, 220); gtk_widget_show(notebook); if ((scrolledwin = about_create_child_page_info()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_Info"))); } if ((scrolledwin = about_create_child_page_authors()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_Authors"))); } if ((scrolledwin = about_create_child_page_features()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_Features"))); } if ((scrolledwin = about_create_child_page_license()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_License"))); } if (release_notes_available() && (scrolledwin = about_create_child_page_release_notes()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_Release Notes"))); } if ((scrolledwin = about_create_child_page_session_stats()) != NULL) { gtk_notebook_append_page(GTK_NOTEBOOK(notebook), scrolledwin, gtk_label_new_with_mnemonic(_("_Statistics"))); } gtk_box_pack_start(GTK_BOX(vbox1), notebook, TRUE, TRUE, 0); gtkut_stock_button_set_create(&confirm_area, &close_button, GTK_STOCK_CLOSE, NULL, NULL, NULL, NULL); gtk_box_pack_end(GTK_BOX(vbox1), confirm_area, FALSE, FALSE, 4); gtk_widget_grab_default(close_button); gtk_widget_grab_focus(close_button); g_signal_connect_closure (G_OBJECT(close_button), "clicked", g_cclosure_new_swap(G_CALLBACK(gtk_widget_hide_on_delete), window, NULL), FALSE); gtk_widget_show_all(window); }
NoticeView *noticeview_create(MainWindow *mainwin) { NoticeView *noticeview; GtkWidget *vbox; GtkWidget *hsep; GtkWidget *hbox; GtkWidget *icon; GtkWidget *text; GtkWidget *widget; GtkWidget *widget2; debug_print("Creating notice view...\n"); noticeview = g_new0(NoticeView, 1); noticeview->window = mainwin->window; vbox = gtk_vbox_new(FALSE, 4); gtk_widget_show(vbox); hsep = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(vbox), hsep, FALSE, TRUE, 1); hbox = gtk_hbox_new(FALSE, 4); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 1); icon = stock_pixmap_widget(noticeview->window, STOCK_PIXMAP_NOTICE_WARN); #if 0 /* also possible... */ icon = gtk_pixmap_new(NULL, NULL); #endif gtk_widget_show(icon); gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, TRUE, 0); text = gtk_label_new(""); gtk_widget_show(text); gtk_box_pack_start(GTK_BOX(hbox), text, FALSE, FALSE, 0); widget = gtk_button_new_with_label(""); gtk_widget_set_usize(widget, 120, -1); gtk_signal_connect(GTK_OBJECT(widget), "clicked", GTK_SIGNAL_FUNC(noticeview_button_pressed), (gpointer) noticeview); gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, FALSE, 4); widget2 = gtk_button_new_with_label(""); gtk_widget_set_usize(widget2, 120, -1); gtk_signal_connect(GTK_OBJECT(widget2), "clicked", GTK_SIGNAL_FUNC(noticeview_2ndbutton_pressed), (gpointer) noticeview); gtk_box_pack_start(GTK_BOX(hbox), widget2, FALSE, FALSE, 0); noticeview->vbox = vbox; noticeview->hsep = hsep; noticeview->hbox = hbox; noticeview->icon = icon; noticeview->text = text; noticeview->button = widget; noticeview->button2 = widget2; noticeview->visible = TRUE; return noticeview; }