Beispiel #1
0
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;
}
Beispiel #2
0
/**
 * \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;

}
Beispiel #3
0
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);
}
Beispiel #4
0
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;
}