[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-themes.h \
|
||||||
appearance-style.c \
|
appearance-style.c \
|
||||||
appearance-style.h \
|
appearance-style.h \
|
||||||
gedit-message-area.c \
|
|
||||||
gedit-message-area.h \
|
|
||||||
gnome-wp-info.c \
|
gnome-wp-info.c \
|
||||||
gnome-wp-info.h \
|
gnome-wp-info.h \
|
||||||
gnome-wp-item.c \
|
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>
|
* Written by Thomas Wood <thos@gnome.org>
|
||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
*
|
*
|
||||||
|
@ -28,7 +28,6 @@
|
||||||
#include "gconf-property-editor.h"
|
#include "gconf-property-editor.h"
|
||||||
#include "theme-thumbnail.h"
|
#include "theme-thumbnail.h"
|
||||||
#include "capplet-util.h"
|
#include "capplet-util.h"
|
||||||
#include "gedit-message-area.h"
|
|
||||||
|
|
||||||
typedef void (* ThumbnailGenFunc) (void *type,
|
typedef void (* ThumbnailGenFunc) (void *type,
|
||||||
ThemeThumbnailFunc theme,
|
ThemeThumbnailFunc theme,
|
||||||
|
@ -221,17 +220,18 @@ update_message_area (AppearanceData *data)
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
GtkWidget *parent;
|
GtkWidget *parent;
|
||||||
GtkWidget *icon;
|
GtkWidget *icon;
|
||||||
|
GtkWidget *content;
|
||||||
|
|
||||||
if (engine == NULL)
|
if (engine == NULL)
|
||||||
return;
|
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",
|
g_signal_connect (data->style_message_area, "response",
|
||||||
(GCallback) style_message_area_response_cb, data);
|
(GCallback) style_message_area_response_cb, data);
|
||||||
|
|
||||||
data->style_install_button = gedit_message_area_add_button (
|
data->style_install_button = gtk_info_bar_add_button (
|
||||||
GEDIT_MESSAGE_AREA (data->style_message_area),
|
GTK_INFO_BAR (data->style_message_area),
|
||||||
_("Install"), GTK_RESPONSE_APPLY);
|
_("Install"), GTK_RESPONSE_APPLY);
|
||||||
|
|
||||||
data->style_message_label = gtk_label_new (NULL);
|
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_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), icon, FALSE, FALSE, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), data->style_message_label, TRUE, TRUE, 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_show_all (data->style_message_area);
|
||||||
gtk_widget_set_no_show_all (data->style_message_area, TRUE);
|
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>
|
* Written by Thomas Wood <thos@gnome.org>
|
||||||
* Jens Granseuer <jensgr@gmx.net>
|
* Jens Granseuer <jensgr@gmx.net>
|
||||||
* All Rights Reserved
|
* All Rights Reserved
|
||||||
|
@ -26,7 +26,6 @@
|
||||||
#include "theme-save.h"
|
#include "theme-save.h"
|
||||||
#include "theme-util.h"
|
#include "theme-util.h"
|
||||||
#include "gtkrc-utils.h"
|
#include "gtkrc-utils.h"
|
||||||
#include "gedit-message-area.h"
|
|
||||||
|
|
||||||
#include <glib/gi18n.h>
|
#include <glib/gi18n.h>
|
||||||
#include <libwindow-settings/gnome-wm-manager.h>
|
#include <libwindow-settings/gnome-wm-manager.h>
|
||||||
|
@ -658,30 +657,31 @@ theme_message_area_update (AppearanceData *data)
|
||||||
if (data->theme_message_area == NULL) {
|
if (data->theme_message_area == NULL) {
|
||||||
GtkWidget *hbox;
|
GtkWidget *hbox;
|
||||||
GtkWidget *parent;
|
GtkWidget *parent;
|
||||||
|
GtkWidget *content;
|
||||||
|
|
||||||
if (!show_apply_background && !show_revert_font && !show_apply_font && !show_error)
|
if (!show_apply_background && !show_revert_font && !show_apply_font && !show_error)
|
||||||
return;
|
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);
|
gtk_widget_set_no_show_all (data->theme_message_area, TRUE);
|
||||||
|
|
||||||
g_signal_connect (data->theme_message_area, "response",
|
g_signal_connect (data->theme_message_area, "response",
|
||||||
(GCallback) theme_message_area_response_cb, data);
|
(GCallback) theme_message_area_response_cb, data);
|
||||||
|
|
||||||
data->apply_background_button = gedit_message_area_add_button (
|
data->apply_background_button = gtk_info_bar_add_button (
|
||||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
GTK_INFO_BAR (data->theme_message_area),
|
||||||
_("Apply Background"),
|
_("Apply Background"),
|
||||||
RESPONSE_APPLY_BG);
|
RESPONSE_APPLY_BG);
|
||||||
data->apply_font_button = gedit_message_area_add_button (
|
data->apply_font_button = gtk_info_bar_add_button (
|
||||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
GTK_INFO_BAR (data->theme_message_area),
|
||||||
_("Apply Font"),
|
_("Apply Font"),
|
||||||
RESPONSE_APPLY_FONT);
|
RESPONSE_APPLY_FONT);
|
||||||
data->revert_font_button = gedit_message_area_add_button (
|
data->revert_font_button = gtk_info_bar_add_button (
|
||||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
GTK_INFO_BAR (data->theme_message_area),
|
||||||
_("Revert Font"),
|
_("Revert Font"),
|
||||||
RESPONSE_REVERT_FONT);
|
RESPONSE_REVERT_FONT);
|
||||||
data->install_button = gedit_message_area_add_button (
|
data->install_button = gtk_info_bar_add_button (
|
||||||
GEDIT_MESSAGE_AREA (data->theme_message_area),
|
GTK_INFO_BAR (data->theme_message_area),
|
||||||
_("Install"),
|
_("Install"),
|
||||||
RESPONSE_INSTALL_ENGINE);
|
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_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_error_icon, FALSE, FALSE, 0);
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), data->theme_message_label, TRUE, TRUE, 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");
|
parent = appearance_capplet_get_widget (data, "theme_list_vbox");
|
||||||
gtk_box_pack_start (GTK_BOX (parent), data->theme_message_area, FALSE, FALSE, 0);
|
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 Check that we meet the dependencies
|
||||||
dnl ==============================================
|
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
|
glib-2.0 >= 2.17.4 dnl
|
||||||
gthread-2.0 dnl
|
gthread-2.0 dnl
|
||||||
gio-2.0 dnl
|
gio-2.0 dnl
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue