[appearance] use GtkInfoBar rather than a copy of GeditMessageArea
GtkInfoBar (available in Gtk+ 2.18) replaces GeditMessageArea.
This commit is contained in:
parent
2e347d700a
commit
54bcf1874d
6 changed files with 21 additions and 776 deletions
|
@ -16,8 +16,6 @@ gnome_appearance_properties_SOURCES = \
|
|||
appearance-themes.h \
|
||||
appearance-style.c \
|
||||
appearance-style.h \
|
||||
gedit-message-area.c \
|
||||
gedit-message-area.h \
|
||||
gnome-wp-info.c \
|
||||
gnome-wp-info.h \
|
||||
gnome-wp-item.c \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2007 The GNOME Foundation
|
||||
* Copyright (C) 2007, 2010 The GNOME Foundation
|
||||
* Written by Thomas Wood <thos@gnome.org>
|
||||
* All Rights Reserved
|
||||
*
|
||||
|
@ -28,7 +28,6 @@
|
|||
#include "gconf-property-editor.h"
|
||||
#include "theme-thumbnail.h"
|
||||
#include "capplet-util.h"
|
||||
#include "gedit-message-area.h"
|
||||
|
||||
typedef void (* ThumbnailGenFunc) (void *type,
|
||||
ThemeThumbnailFunc theme,
|
||||
|
@ -221,17 +220,18 @@ update_message_area (AppearanceData *data)
|
|||
GtkWidget *hbox;
|
||||
GtkWidget *parent;
|
||||
GtkWidget *icon;
|
||||
GtkWidget *content;
|
||||
|
||||
if (engine == NULL)
|
||||
return;
|
||||
|
||||
data->style_message_area = gedit_message_area_new ();
|
||||
data->style_message_area = gtk_info_bar_new ();
|
||||
|
||||
g_signal_connect (data->style_message_area, "response",
|
||||
(GCallback) style_message_area_response_cb, data);
|
||||
|
||||
data->style_install_button = gedit_message_area_add_button (
|
||||
GEDIT_MESSAGE_AREA (data->style_message_area),
|
||||
data->style_install_button = gtk_info_bar_add_button (
|
||||
GTK_INFO_BAR (data->style_message_area),
|
||||
_("Install"), GTK_RESPONSE_APPLY);
|
||||
|
||||
data->style_message_label = gtk_label_new (NULL);
|
||||
|
@ -243,7 +243,8 @@ update_message_area (AppearanceData *data)
|
|||
gtk_misc_set_alignment (GTK_MISC (icon), 0.5, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), icon, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), data->style_message_label, TRUE, TRUE, 0);
|
||||
gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (data->style_message_area), hbox);
|
||||
content = gtk_info_bar_get_content_area (GTK_INFO_BAR (data->style_message_area));
|
||||
gtk_container_add (GTK_CONTAINER (content), hbox);
|
||||
gtk_widget_show_all (data->style_message_area);
|
||||
gtk_widget_set_no_show_all (data->style_message_area, TRUE);
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2007 The GNOME Foundation
|
||||
* Copyright (C) 2007, 2010 The GNOME Foundation
|
||||
* Written by Thomas Wood <thos@gnome.org>
|
||||
* Jens Granseuer <jensgr@gmx.net>
|
||||
* All Rights Reserved
|
||||
|
@ -26,7 +26,6 @@
|
|||
#include "theme-save.h"
|
||||
#include "theme-util.h"
|
||||
#include "gtkrc-utils.h"
|
||||
#include "gedit-message-area.h"
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <libwindow-settings/gnome-wm-manager.h>
|
||||
|
@ -658,30 +657,31 @@ theme_message_area_update (AppearanceData *data)
|
|||
if (data->theme_message_area == NULL) {
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *parent;
|
||||
GtkWidget *content;
|
||||
|
||||
if (!show_apply_background && !show_revert_font && !show_apply_font && !show_error)
|
||||
return;
|
||||
|
||||
data->theme_message_area = gedit_message_area_new ();
|
||||
data->theme_message_area = gtk_info_bar_new ();
|
||||
gtk_widget_set_no_show_all (data->theme_message_area, TRUE);
|
||||
|
||||
g_signal_connect (data->theme_message_area, "response",
|
||||
(GCallback) theme_message_area_response_cb, data);
|
||||
|
||||
data->apply_background_button = gedit_message_area_add_button (
|
||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
||||
data->apply_background_button = gtk_info_bar_add_button (
|
||||
GTK_INFO_BAR (data->theme_message_area),
|
||||
_("Apply Background"),
|
||||
RESPONSE_APPLY_BG);
|
||||
data->apply_font_button = gedit_message_area_add_button (
|
||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
||||
data->apply_font_button = gtk_info_bar_add_button (
|
||||
GTK_INFO_BAR (data->theme_message_area),
|
||||
_("Apply Font"),
|
||||
RESPONSE_APPLY_FONT);
|
||||
data->revert_font_button = gedit_message_area_add_button (
|
||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
||||
data->revert_font_button = gtk_info_bar_add_button (
|
||||
GTK_INFO_BAR (data->theme_message_area),
|
||||
_("Revert Font"),
|
||||
RESPONSE_REVERT_FONT);
|
||||
data->install_button = gedit_message_area_add_button (
|
||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
||||
data->install_button = gtk_info_bar_add_button (
|
||||
GTK_INFO_BAR (data->theme_message_area),
|
||||
_("Install"),
|
||||
RESPONSE_INSTALL_ENGINE);
|
||||
|
||||
|
@ -699,7 +699,8 @@ theme_message_area_update (AppearanceData *data)
|
|||
gtk_box_pack_start (GTK_BOX (hbox), data->theme_info_icon, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), data->theme_error_icon, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), data->theme_message_label, TRUE, TRUE, 0);
|
||||
gedit_message_area_set_contents (GEDIT_MESSAGE_AREA (data->theme_message_area), hbox);
|
||||
content = gtk_info_bar_get_content_area (GTK_INFO_BAR (data->theme_message_area));
|
||||
gtk_container_add (GTK_CONTAINER (content), hbox);
|
||||
|
||||
parent = appearance_capplet_get_widget (data, "theme_list_vbox");
|
||||
gtk_box_pack_start (GTK_BOX (parent), data->theme_message_area, FALSE, FALSE, 0);
|
||||
|
|
|
@ -1,626 +0,0 @@
|
|||
/*
|
||||
* gedit-message-area.c
|
||||
* This file is part of gedit
|
||||
*
|
||||
* Copyright (C) 2005 - Paolo Maggi
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the gedit Team, 2005. See the AUTHORS file for a
|
||||
* list of people on the gedit Team.
|
||||
* See the ChangeLog files for a list of changes.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* TODO: Style properties */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib/gi18n.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkkeysyms.h>
|
||||
|
||||
#include "gedit-message-area.h"
|
||||
|
||||
#define GEDIT_MESSAGE_AREA_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), \
|
||||
GEDIT_TYPE_MESSAGE_AREA, \
|
||||
GeditMessageAreaPrivate))
|
||||
|
||||
struct _GeditMessageAreaPrivate
|
||||
{
|
||||
GtkWidget *main_hbox;
|
||||
|
||||
GtkWidget *contents;
|
||||
GtkWidget *action_area;
|
||||
|
||||
gboolean changing_style;
|
||||
};
|
||||
|
||||
typedef struct _ResponseData ResponseData;
|
||||
|
||||
struct _ResponseData
|
||||
{
|
||||
gint response_id;
|
||||
};
|
||||
|
||||
enum {
|
||||
RESPONSE,
|
||||
CLOSE,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL];
|
||||
|
||||
G_DEFINE_TYPE(GeditMessageArea, gedit_message_area, GTK_TYPE_HBOX)
|
||||
|
||||
|
||||
static void
|
||||
gedit_message_area_finalize (GObject *object)
|
||||
{
|
||||
/*
|
||||
GeditMessageArea *message_area = GEDIT_MESSAGE_AREA (object);
|
||||
*/
|
||||
|
||||
G_OBJECT_CLASS (gedit_message_area_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static ResponseData *
|
||||
get_response_data (GtkWidget *widget,
|
||||
gboolean create)
|
||||
{
|
||||
ResponseData *ad = g_object_get_data (G_OBJECT (widget),
|
||||
"gedit-message-area-response-data");
|
||||
|
||||
if (ad == NULL && create)
|
||||
{
|
||||
ad = g_new (ResponseData, 1);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (widget),
|
||||
"gedit-message-area-response-data",
|
||||
ad,
|
||||
g_free);
|
||||
}
|
||||
|
||||
return ad;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
find_button (GeditMessageArea *message_area,
|
||||
gint response_id)
|
||||
{
|
||||
GList *children, *tmp_list;
|
||||
GtkWidget *child = NULL;
|
||||
|
||||
children = gtk_container_get_children (
|
||||
GTK_CONTAINER (message_area->priv->action_area));
|
||||
|
||||
for (tmp_list = children; tmp_list; tmp_list = tmp_list->next)
|
||||
{
|
||||
ResponseData *rd = get_response_data (tmp_list->data, FALSE);
|
||||
|
||||
if (rd && rd->response_id == response_id)
|
||||
{
|
||||
child = tmp_list->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
static void
|
||||
gedit_message_area_close (GeditMessageArea *message_area)
|
||||
{
|
||||
if (!find_button (message_area, GTK_RESPONSE_CANCEL))
|
||||
return;
|
||||
|
||||
/* emit response signal */
|
||||
gedit_message_area_response (GEDIT_MESSAGE_AREA (message_area),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
paint_message_area (GtkWidget *widget,
|
||||
GdkEventExpose *event,
|
||||
gpointer user_data)
|
||||
{
|
||||
gtk_paint_flat_box (widget->style,
|
||||
widget->window,
|
||||
GTK_STATE_NORMAL,
|
||||
GTK_SHADOW_OUT,
|
||||
NULL,
|
||||
widget,
|
||||
"tooltip",
|
||||
widget->allocation.x + 1,
|
||||
widget->allocation.y + 1,
|
||||
widget->allocation.width - 2,
|
||||
widget->allocation.height - 2);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gedit_message_area_class_init (GeditMessageAreaClass *klass)
|
||||
{
|
||||
GObjectClass *object_class;
|
||||
GtkBindingSet *binding_set;
|
||||
|
||||
object_class = G_OBJECT_CLASS (klass);
|
||||
object_class->finalize = gedit_message_area_finalize;
|
||||
|
||||
klass->close = gedit_message_area_close;
|
||||
|
||||
g_type_class_add_private (object_class, sizeof(GeditMessageAreaPrivate));
|
||||
|
||||
signals[RESPONSE] = g_signal_new ("response",
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
G_STRUCT_OFFSET (GeditMessageAreaClass, response),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__INT,
|
||||
G_TYPE_NONE, 1,
|
||||
G_TYPE_INT);
|
||||
|
||||
signals[CLOSE] = g_signal_new ("close",
|
||||
G_OBJECT_CLASS_TYPE (klass),
|
||||
G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
|
||||
G_STRUCT_OFFSET (GeditMessageAreaClass, close),
|
||||
NULL, NULL,
|
||||
g_cclosure_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
binding_set = gtk_binding_set_by_class (klass);
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Escape, 0, "close", 0);
|
||||
}
|
||||
|
||||
static void
|
||||
style_set (GtkWidget *widget,
|
||||
GtkStyle *prev_style,
|
||||
GeditMessageArea *message_area)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkStyle *style;
|
||||
|
||||
if (message_area->priv->changing_style)
|
||||
return;
|
||||
|
||||
/* This is a hack needed to use the tooltip background color */
|
||||
window = gtk_window_new (GTK_WINDOW_POPUP);
|
||||
gtk_widget_set_name (window, "gtk-tooltip");
|
||||
gtk_widget_ensure_style (window);
|
||||
style = gtk_widget_get_style (window);
|
||||
|
||||
message_area->priv->changing_style = TRUE;
|
||||
gtk_widget_set_style (GTK_WIDGET (message_area), style);
|
||||
message_area->priv->changing_style = FALSE;
|
||||
|
||||
gtk_widget_destroy (window);
|
||||
|
||||
gtk_widget_queue_draw (GTK_WIDGET (message_area));
|
||||
}
|
||||
|
||||
static void
|
||||
gedit_message_area_init (GeditMessageArea *message_area)
|
||||
{
|
||||
message_area->priv = GEDIT_MESSAGE_AREA_GET_PRIVATE (message_area);
|
||||
|
||||
message_area->priv->main_hbox = gtk_hbox_new (FALSE, 16); /* FIXME: use style properties */
|
||||
gtk_widget_show (message_area->priv->main_hbox);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (message_area->priv->main_hbox),
|
||||
8); /* FIXME: use style properties */
|
||||
|
||||
message_area->priv->action_area = gtk_vbox_new (TRUE, 10); /* FIXME: use style properties */
|
||||
gtk_widget_show (message_area->priv->action_area);
|
||||
gtk_box_pack_end (GTK_BOX (message_area->priv->main_hbox),
|
||||
message_area->priv->action_area,
|
||||
FALSE,
|
||||
TRUE,
|
||||
0);
|
||||
|
||||
gtk_box_pack_start (GTK_BOX (message_area),
|
||||
message_area->priv->main_hbox,
|
||||
TRUE,
|
||||
TRUE,
|
||||
0);
|
||||
|
||||
gtk_widget_set_app_paintable (GTK_WIDGET (message_area), TRUE);
|
||||
|
||||
g_signal_connect (message_area,
|
||||
"expose-event",
|
||||
G_CALLBACK (paint_message_area),
|
||||
NULL);
|
||||
|
||||
/* Note that we connect to style-set on one of the internal
|
||||
* widgets, not on the message area itself, since gtk does
|
||||
* not deliver any further style-set signals for a widget on
|
||||
* which the style has been forced with gtk_widget_set_style() */
|
||||
g_signal_connect (message_area->priv->main_hbox,
|
||||
"style-set",
|
||||
G_CALLBACK (style_set),
|
||||
message_area);
|
||||
}
|
||||
|
||||
static gint
|
||||
get_response_for_widget (GeditMessageArea *message_area,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
ResponseData *rd;
|
||||
|
||||
rd = get_response_data (widget, FALSE);
|
||||
if (!rd)
|
||||
return GTK_RESPONSE_NONE;
|
||||
else
|
||||
return rd->response_id;
|
||||
}
|
||||
|
||||
static void
|
||||
action_widget_activated (GtkWidget *widget, GeditMessageArea *message_area)
|
||||
{
|
||||
gint response_id;
|
||||
|
||||
response_id = get_response_for_widget (message_area, widget);
|
||||
|
||||
gedit_message_area_response (message_area, response_id);
|
||||
}
|
||||
|
||||
void
|
||||
gedit_message_area_add_action_widget (GeditMessageArea *message_area,
|
||||
GtkWidget *child,
|
||||
gint response_id)
|
||||
{
|
||||
ResponseData *ad;
|
||||
guint signal_id;
|
||||
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
g_return_if_fail (GTK_IS_WIDGET (child));
|
||||
|
||||
ad = get_response_data (child, TRUE);
|
||||
|
||||
ad->response_id = response_id;
|
||||
|
||||
if (GTK_IS_BUTTON (child))
|
||||
signal_id = g_signal_lookup ("clicked", GTK_TYPE_BUTTON);
|
||||
else
|
||||
signal_id = GTK_WIDGET_GET_CLASS (child)->activate_signal;
|
||||
|
||||
if (signal_id)
|
||||
{
|
||||
GClosure *closure;
|
||||
|
||||
closure = g_cclosure_new_object (G_CALLBACK (action_widget_activated),
|
||||
G_OBJECT (message_area));
|
||||
|
||||
g_signal_connect_closure_by_id (child,
|
||||
signal_id,
|
||||
0,
|
||||
closure,
|
||||
FALSE);
|
||||
}
|
||||
else
|
||||
g_warning ("Only 'activatable' widgets can be packed into the action area of a GeditMessageArea");
|
||||
|
||||
if (response_id != GTK_RESPONSE_HELP)
|
||||
gtk_box_pack_start (GTK_BOX (message_area->priv->action_area),
|
||||
child,
|
||||
FALSE,
|
||||
FALSE,
|
||||
0);
|
||||
else
|
||||
gtk_box_pack_end (GTK_BOX (message_area->priv->action_area),
|
||||
child,
|
||||
FALSE,
|
||||
FALSE,
|
||||
0);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_set_contents:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @contents: widget you want to add to the contents area
|
||||
*
|
||||
* Adds the @contents widget to the contents area of #GeditMessageArea.
|
||||
*/
|
||||
void
|
||||
gedit_message_area_set_contents (GeditMessageArea *message_area,
|
||||
GtkWidget *contents)
|
||||
{
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
g_return_if_fail (GTK_IS_WIDGET (contents));
|
||||
|
||||
message_area->priv->contents = contents;
|
||||
gtk_box_pack_start (GTK_BOX (message_area->priv->main_hbox),
|
||||
message_area->priv->contents,
|
||||
TRUE,
|
||||
TRUE,
|
||||
0);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_add_button:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @button_text: text of button, or stock ID
|
||||
* @response_id: response ID for the button
|
||||
*
|
||||
* Adds a button with the given text (or a stock button, if button_text is a stock ID)
|
||||
* and sets things up so that clicking the button will emit the "response" signal
|
||||
* with the given response_id. The button is appended to the end of the message area's
|
||||
* action area. The button widget is returned, but usually you don't need it.
|
||||
*
|
||||
* Returns: the button widget that was added
|
||||
*/
|
||||
GtkWidget*
|
||||
gedit_message_area_add_button (GeditMessageArea *message_area,
|
||||
const gchar *button_text,
|
||||
gint response_id)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
g_return_val_if_fail (GEDIT_IS_MESSAGE_AREA (message_area), NULL);
|
||||
g_return_val_if_fail (button_text != NULL, NULL);
|
||||
|
||||
button = gtk_button_new_from_stock (button_text);
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show (button);
|
||||
|
||||
gedit_message_area_add_action_widget (message_area,
|
||||
button,
|
||||
response_id);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
||||
static void
|
||||
add_buttons_valist (GeditMessageArea *message_area,
|
||||
const gchar *first_button_text,
|
||||
va_list args)
|
||||
{
|
||||
const gchar* text;
|
||||
gint response_id;
|
||||
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
|
||||
if (first_button_text == NULL)
|
||||
return;
|
||||
|
||||
text = first_button_text;
|
||||
response_id = va_arg (args, gint);
|
||||
|
||||
while (text != NULL)
|
||||
{
|
||||
gedit_message_area_add_button (message_area,
|
||||
text,
|
||||
response_id);
|
||||
|
||||
text = va_arg (args, gchar*);
|
||||
if (text == NULL)
|
||||
break;
|
||||
|
||||
response_id = va_arg (args, int);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_add_buttons:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @first_button_text: button text or stock ID
|
||||
* @...: response ID for first button, then more text-response_id pairs
|
||||
*
|
||||
* Adds more buttons, same as calling gedit_message_area_add_button() repeatedly.
|
||||
* The variable argument list should be NULL-terminated as with
|
||||
* gedit_message_area_new_with_buttons(). Each button must have both text and response ID.
|
||||
*/
|
||||
void
|
||||
gedit_message_area_add_buttons (GeditMessageArea *message_area,
|
||||
const gchar *first_button_text,
|
||||
...)
|
||||
{
|
||||
va_list args;
|
||||
|
||||
va_start (args, first_button_text);
|
||||
|
||||
add_buttons_valist (message_area,
|
||||
first_button_text,
|
||||
args);
|
||||
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_new:
|
||||
*
|
||||
* Creates a new #GeditMessageArea object.
|
||||
*
|
||||
* Returns: a new #GeditMessageArea object
|
||||
*/
|
||||
GtkWidget *
|
||||
gedit_message_area_new (void)
|
||||
{
|
||||
return g_object_new (GEDIT_TYPE_MESSAGE_AREA, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_new_with_buttons:
|
||||
* @first_button_text: stock ID or text to go in first button, or NULL
|
||||
* @...: response ID for first button, then additional buttons, ending with NULL
|
||||
*
|
||||
* Creates a new #GeditMessageArea with buttons. Button text/response ID pairs
|
||||
* should be listed, with a NULL pointer ending the list. Button text can be either
|
||||
* a stock ID such as GTK_STOCK_OK, or some arbitrary text. A response ID can be any
|
||||
* positive number, or one of the values in the GtkResponseType enumeration. If
|
||||
* the user clicks one of these dialog buttons, GeditMessageArea will emit the "response"
|
||||
* signal with the corresponding response ID.
|
||||
*
|
||||
* Returns: a new #GeditMessageArea
|
||||
*/
|
||||
GtkWidget *
|
||||
gedit_message_area_new_with_buttons (const gchar *first_button_text,
|
||||
...)
|
||||
{
|
||||
GeditMessageArea *message_area;
|
||||
va_list args;
|
||||
|
||||
message_area = GEDIT_MESSAGE_AREA (gedit_message_area_new ());
|
||||
|
||||
va_start (args, first_button_text);
|
||||
|
||||
add_buttons_valist (message_area,
|
||||
first_button_text,
|
||||
args);
|
||||
|
||||
va_end (args);
|
||||
|
||||
return GTK_WIDGET (message_area);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_set_response_sensitive:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @response_id: a response ID
|
||||
* @setting: TRUE for sensitive
|
||||
*
|
||||
* Calls gtk_widget_set_sensitive (widget, setting) for each widget in the dialog's
|
||||
* action area with the given response_id. A convenient way to sensitize/desensitize
|
||||
* dialog buttons.
|
||||
*/
|
||||
void
|
||||
gedit_message_area_set_response_sensitive (GeditMessageArea *message_area,
|
||||
gint response_id,
|
||||
gboolean setting)
|
||||
{
|
||||
GList *children;
|
||||
GList *tmp_list;
|
||||
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (message_area->priv->action_area));
|
||||
|
||||
tmp_list = children;
|
||||
while (tmp_list != NULL)
|
||||
{
|
||||
GtkWidget *widget = tmp_list->data;
|
||||
ResponseData *rd = get_response_data (widget, FALSE);
|
||||
|
||||
if (rd && rd->response_id == response_id)
|
||||
gtk_widget_set_sensitive (widget, setting);
|
||||
|
||||
tmp_list = g_list_next (tmp_list);
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_set_default_response:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @response_id: a response ID
|
||||
*
|
||||
* Sets the last widget in the message area's action area with the given response_id
|
||||
* as the default widget for the dialog. Pressing "Enter" normally activates the
|
||||
* default widget.
|
||||
*/
|
||||
void
|
||||
gedit_message_area_set_default_response (GeditMessageArea *message_area,
|
||||
gint response_id)
|
||||
{
|
||||
GList *children;
|
||||
GList *tmp_list;
|
||||
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (message_area->priv->action_area));
|
||||
|
||||
tmp_list = children;
|
||||
while (tmp_list != NULL)
|
||||
{
|
||||
GtkWidget *widget = tmp_list->data;
|
||||
ResponseData *rd = get_response_data (widget, FALSE);
|
||||
|
||||
if (rd && rd->response_id == response_id)
|
||||
gtk_widget_grab_default (widget);
|
||||
|
||||
tmp_list = g_list_next (tmp_list);
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_set_default_response:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @response_id: a response ID
|
||||
*
|
||||
* Emits the 'response' signal with the given @response_id.
|
||||
*/
|
||||
void
|
||||
gedit_message_area_response (GeditMessageArea *message_area,
|
||||
gint response_id)
|
||||
{
|
||||
g_return_if_fail (GEDIT_IS_MESSAGE_AREA (message_area));
|
||||
|
||||
g_signal_emit (message_area,
|
||||
signals[RESPONSE],
|
||||
0,
|
||||
response_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* gedit_message_area_add_stock_button_with_text:
|
||||
* @message_area: a #GeditMessageArea
|
||||
* @text: the text to visualize in the button
|
||||
* @stock_id: the stock ID of the button
|
||||
* @response_id: a response ID
|
||||
*
|
||||
* Same as gedit_message_area_add_button() but with a specific text.
|
||||
*/
|
||||
GtkWidget *
|
||||
gedit_message_area_add_stock_button_with_text (GeditMessageArea *message_area,
|
||||
const gchar *text,
|
||||
const gchar *stock_id,
|
||||
gint response_id)
|
||||
{
|
||||
GtkWidget *button;
|
||||
|
||||
g_return_val_if_fail (GEDIT_IS_MESSAGE_AREA (message_area), NULL);
|
||||
g_return_val_if_fail (text != NULL, NULL);
|
||||
g_return_val_if_fail (stock_id != NULL, NULL);
|
||||
|
||||
button = gtk_button_new_with_mnemonic (text);
|
||||
gtk_button_set_image (GTK_BUTTON (button),
|
||||
gtk_image_new_from_stock (stock_id,
|
||||
GTK_ICON_SIZE_BUTTON));
|
||||
|
||||
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
|
||||
|
||||
gtk_widget_show (button);
|
||||
|
||||
gedit_message_area_add_action_widget (message_area,
|
||||
button,
|
||||
response_id);
|
||||
|
||||
return button;
|
||||
}
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
/*
|
||||
* gedit-message-area.h
|
||||
* This file is part of gedit
|
||||
*
|
||||
* Copyright (C) 2005 - Paolo Maggi
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Modified by the gedit Team, 2005. See the AUTHORS file for a
|
||||
* list of people on the gedit Team.
|
||||
* See the ChangeLog files for a list of changes.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef __GEDIT_MESSAGE_AREA_H__
|
||||
#define __GEDIT_MESSAGE_AREA_H__
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* Type checking and casting macros
|
||||
*/
|
||||
#define GEDIT_TYPE_MESSAGE_AREA (gedit_message_area_get_type())
|
||||
#define GEDIT_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GEDIT_TYPE_MESSAGE_AREA, GeditMessageArea))
|
||||
#define GEDIT_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GEDIT_TYPE_MESSAGE_AREA, GeditMessageAreaClass))
|
||||
#define GEDIT_IS_MESSAGE_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GEDIT_TYPE_MESSAGE_AREA))
|
||||
#define GEDIT_IS_MESSAGE_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GEDIT_TYPE_MESSAGE_AREA))
|
||||
#define GEDIT_MESSAGE_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GEDIT_TYPE_MESSAGE_AREA, GeditMessageAreaClass))
|
||||
|
||||
/* Private structure type */
|
||||
typedef struct _GeditMessageAreaPrivate GeditMessageAreaPrivate;
|
||||
|
||||
/*
|
||||
* Main object structure
|
||||
*/
|
||||
typedef struct _GeditMessageArea GeditMessageArea;
|
||||
|
||||
struct _GeditMessageArea
|
||||
{
|
||||
GtkHBox parent;
|
||||
|
||||
/*< private > */
|
||||
GeditMessageAreaPrivate *priv;
|
||||
};
|
||||
|
||||
/*
|
||||
* Class definition
|
||||
*/
|
||||
typedef struct _GeditMessageAreaClass GeditMessageAreaClass;
|
||||
|
||||
struct _GeditMessageAreaClass
|
||||
{
|
||||
GtkHBoxClass parent_class;
|
||||
|
||||
/* Signals */
|
||||
void (* response) (GeditMessageArea *message_area, gint response_id);
|
||||
|
||||
/* Keybinding signals */
|
||||
void (* close) (GeditMessageArea *message_area);
|
||||
|
||||
/* Padding for future expansion */
|
||||
void (*_gedit_reserved1) (void);
|
||||
void (*_gedit_reserved2) (void);
|
||||
};
|
||||
|
||||
/*
|
||||
* Public methods
|
||||
*/
|
||||
GType gedit_message_area_get_type (void) G_GNUC_CONST;
|
||||
|
||||
GtkWidget *gedit_message_area_new (void);
|
||||
|
||||
GtkWidget *gedit_message_area_new_with_buttons (const gchar *first_button_text,
|
||||
...);
|
||||
|
||||
void gedit_message_area_set_contents (GeditMessageArea *message_area,
|
||||
GtkWidget *contents);
|
||||
|
||||
void gedit_message_area_add_action_widget (GeditMessageArea *message_area,
|
||||
GtkWidget *child,
|
||||
gint response_id);
|
||||
|
||||
GtkWidget *gedit_message_area_add_button (GeditMessageArea *message_area,
|
||||
const gchar *button_text,
|
||||
gint response_id);
|
||||
|
||||
GtkWidget *gedit_message_area_add_stock_button_with_text
|
||||
(GeditMessageArea *message_area,
|
||||
const gchar *text,
|
||||
const gchar *stock_id,
|
||||
gint response_id);
|
||||
|
||||
void gedit_message_area_add_buttons (GeditMessageArea *message_area,
|
||||
const gchar *first_button_text,
|
||||
...);
|
||||
|
||||
void gedit_message_area_set_response_sensitive
|
||||
(GeditMessageArea *message_area,
|
||||
gint response_id,
|
||||
gboolean setting);
|
||||
void gedit_message_area_set_default_response
|
||||
(GeditMessageArea *message_area,
|
||||
gint response_id);
|
||||
|
||||
/* Emit response signal */
|
||||
void gedit_message_area_response (GeditMessageArea *message_area,
|
||||
gint response_id);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __GEDIT_MESSAGE_AREA_H__ */
|
|
@ -88,7 +88,7 @@ dnl ==============================================
|
|||
dnl Check that we meet the dependencies
|
||||
dnl ==============================================
|
||||
|
||||
COMMON_MODULES="gtk+-2.0 >= 2.15.0 dnl
|
||||
COMMON_MODULES="gtk+-2.0 >= 2.18.0 dnl
|
||||
glib-2.0 >= 2.17.4 dnl
|
||||
gthread-2.0 dnl
|
||||
gio-2.0 dnl
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue