summaryrefslogtreecommitdiff
path: root/tp-account-widgets
diff options
context:
space:
mode:
authorDebarshi Ray <debarshir@gnome.org>2014-05-22 15:59:15 +0200
committerDebarshi Ray <debarshir@gnome.org>2014-06-04 11:48:33 +0200
commitb838c54c673165a9d948b18f21580a0ca94f8cd5 (patch)
tree6718d4615b838ded79ad07aec40ca172425e9607 /tp-account-widgets
parentb04b81badd62a22d39cb5bf5d3e565ba041a7e6a (diff)
downloadtelepathy-account-widgets-b838c54c673165a9d948b18f21580a0ca94f8cd5.tar.gz
account-widget: Make it work with dialogs using header bars
The tpaw_account_widget_new_for_protocol API has been changed to take a pointer to a GtkDialog instead of a GtkBox. If one is passed, then buttons are added to it without directly touching the action area. This way things will work irrespective of whether a header bar is being used or not. If NULL is passed, a button box is created and used for packing the buttons inside the widget as was the case before. In other words, this only affects users of this API who used to pass an action area. Those who did not should not be affected. https://bugzilla.gnome.org/show_bug.cgi?id=730578
Diffstat (limited to 'tp-account-widgets')
-rw-r--r--tp-account-widgets/tpaw-account-widget.c90
-rw-r--r--tp-account-widgets/tpaw-account-widget.h2
2 files changed, 50 insertions, 42 deletions
diff --git a/tp-account-widgets/tpaw-account-widget.c b/tp-account-widgets/tpaw-account-widget.c
index f4e3cd72..93b672de 100644
--- a/tp-account-widgets/tpaw-account-widget.c
+++ b/tp-account-widgets/tpaw-account-widget.c
@@ -69,14 +69,14 @@ struct _TpawAccountWidgetPriv {
GtkWidget *cancel_button;
GtkWidget *entry_password;
GtkWidget *spinbutton_port;
- GtkWidget *action_area;
+ GtkWidget *dialog;
gboolean simple;
gboolean contains_pending_changes;
- /* Whether the action area was provided or it's an internal one we
- * created ourselves */
+ /* Whether the action area is part of an external dialog or it's an
+ * internal one we created ourselves */
gboolean external_action_area;
/* An TpawAccountWidget can be used to either create an account or
@@ -116,7 +116,7 @@ enum {
PROP_SIMPLE,
PROP_CREATING_ACCOUNT,
PROP_OTHER_ACCOUNTS_EXIST,
- PROP_ACTION_AREA,
+ PROP_DIALOG,
};
enum {
@@ -196,7 +196,7 @@ account_widget_set_control_buttons_sensitivity (TpawAccountWidget *self,
gtk_widget_set_sensitive (self->priv->apply_button, sensitive);
- if (sensitive)
+ if (sensitive && self->priv->dialog == NULL)
{
/* We can't grab default if the widget hasn't be packed in a
* window */
@@ -1664,11 +1664,11 @@ do_set_property (GObject *object,
tpaw_account_widget_set_other_accounts_exist (
TPAW_ACCOUNT_WIDGET (object), g_value_get_boolean (value));
break;
- case PROP_ACTION_AREA:
- self->priv->action_area = g_value_get_object (value);
- if (self->priv->action_area != NULL)
+ case PROP_DIALOG:
+ self->priv->dialog = g_value_get_object (value);
+ if (self->priv->dialog != NULL)
{
- g_object_ref_sink (self->priv->action_area);
+ g_object_ref_sink (self->priv->dialog);
self->priv->external_action_area = TRUE;
}
break;
@@ -1703,8 +1703,8 @@ do_get_property (GObject *object,
case PROP_OTHER_ACCOUNTS_EXIST:
g_value_set_boolean (value, self->priv->other_accounts_exist);
break;
- case PROP_ACTION_AREA:
- g_value_set_object (value, self->priv->action_area);
+ case PROP_DIALOG:
+ g_value_set_object (value, self->priv->dialog);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -1898,44 +1898,51 @@ do_constructed (GObject *obj)
if (!self->priv->external_action_area)
{
- g_assert (self->priv->action_area == NULL);
- self->priv->action_area = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
- gtk_button_box_set_layout (GTK_BUTTON_BOX (self->priv->action_area),
+ GtkWidget *button_box;
+
+ g_assert (self->priv->dialog == NULL);
+ button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
+ gtk_button_box_set_layout (GTK_BUTTON_BOX (button_box),
GTK_BUTTONBOX_END);
/* Hard code the default spacing as we cannot easily get this property
* as the widget is not in a GtkDialog yet (and it could end up packed
* in a non-GtkDialog window anyway */
- gtk_box_set_spacing (GTK_BOX (self->priv->action_area), 6);
- /* If the action area is set by the user of this class then we keep a
- * reference, so we do the same here */
- g_object_ref_sink (self->priv->action_area);
+ gtk_box_set_spacing (GTK_BOX (button_box), 6);
+
+ self->priv->cancel_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
+ gtk_box_pack_end (GTK_BOX (button_box),
+ self->priv->cancel_button, TRUE, TRUE, 3);
+
+ self->priv->apply_button = gtk_button_new ();
+ gtk_box_pack_end (GTK_BOX (button_box),
+ self->priv->apply_button, TRUE, TRUE, 3);
+
+ gtk_box_pack_end (GTK_BOX (self), button_box, FALSE, FALSE, 3);
+ gtk_widget_show_all (button_box);
}
else
{
- g_assert (self->priv->action_area != NULL);
+ g_assert (self->priv->dialog != NULL);
+ self->priv->cancel_button = gtk_dialog_add_button (
+ GTK_DIALOG (self->priv->dialog),
+ GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CANCEL);
+ self->priv->apply_button = gtk_dialog_add_button (
+ GTK_DIALOG (self->priv->dialog),
+ "",
+ GTK_RESPONSE_APPLY);
+ gtk_dialog_set_default_response (GTK_DIALOG (self->priv->dialog),
+ GTK_RESPONSE_APPLY);
}
- self->priv->cancel_button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
-
- self->priv->apply_button = gtk_button_new ();
set_apply_button (self);
- gtk_box_pack_end (GTK_BOX (self->priv->action_area),
- self->priv->cancel_button, TRUE, TRUE, 3);
- gtk_box_pack_end (GTK_BOX (self->priv->action_area),
- self->priv->apply_button, TRUE, TRUE, 3);
-
- if (!self->priv->external_action_area)
- gtk_box_pack_end (GTK_BOX (self), self->priv->action_area, FALSE,
- FALSE, 3);
-
g_signal_connect (self->priv->cancel_button, "clicked",
G_CALLBACK (account_widget_cancel_clicked_cb),
self);
g_signal_connect (self->priv->apply_button, "clicked",
G_CALLBACK (account_widget_apply_clicked_cb),
self);
- gtk_widget_show_all (self->priv->action_area);
if (self->priv->creating_account)
/* When creating an account, the user might have nothing to enter.
@@ -1969,7 +1976,7 @@ do_dispose (GObject *obj)
g_clear_object (&self->priv->settings);
g_clear_object (&self->priv->account_manager);
- g_clear_object (&self->priv->action_area);
+ g_clear_object (&self->priv->dialog);
if (G_OBJECT_CLASS (tpaw_account_widget_parent_class)->dispose != NULL)
G_OBJECT_CLASS (tpaw_account_widget_parent_class)->dispose (obj);
@@ -2034,12 +2041,12 @@ tpaw_account_widget_class_init (TpawAccountWidgetClass *klass)
g_object_class_install_property (oclass, PROP_OTHER_ACCOUNTS_EXIST,
param_spec);
- param_spec = g_param_spec_object ("action-area",
- "action-area",
- "The widget where to pack the action buttons (or NULL)",
- GTK_TYPE_BOX,
+ param_spec = g_param_spec_object ("dialog",
+ "dialog",
+ "The dialog where to pack the action buttons (or NULL)",
+ GTK_TYPE_DIALOG,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_ACTION_AREA,
+ g_object_class_install_property (oclass, PROP_DIALOG,
param_spec);
signals[HANDLE_APPLY] =
@@ -2112,7 +2119,7 @@ tpaw_account_widget_handle_params (TpawAccountWidget *self,
TpawAccountWidget *
tpaw_account_widget_new_for_protocol (TpawAccountSettings *settings,
- GtkBox *action_area,
+ GtkDialog *dialog,
gboolean simple)
{
g_return_val_if_fail (TPAW_IS_ACCOUNT_SETTINGS (settings), NULL);
@@ -2123,7 +2130,7 @@ tpaw_account_widget_new_for_protocol (TpawAccountSettings *settings,
"simple", simple,
"creating-account",
tpaw_account_settings_get_account (settings) == NULL,
- "action-area", action_area,
+ "dialog", dialog,
NULL);
}
@@ -2231,5 +2238,6 @@ tpaw_account_widget_get_settings (TpawAccountWidget *self)
void
tpaw_account_widget_hide_buttons (TpawAccountWidget *self)
{
- gtk_widget_hide (self->priv->action_area);
+ gtk_widget_hide (self->priv->apply_button);
+ gtk_widget_hide (self->priv->cancel_button);
}
diff --git a/tp-account-widgets/tpaw-account-widget.h b/tp-account-widgets/tpaw-account-widget.h
index 70ec3285..3ef5f1c8 100644
--- a/tp-account-widgets/tpaw-account-widget.h
+++ b/tp-account-widgets/tpaw-account-widget.h
@@ -60,7 +60,7 @@ GType tpaw_account_widget_get_type (void);
TpawAccountWidget * tpaw_account_widget_new_for_protocol (
TpawAccountSettings *settings,
- GtkBox *action_area,
+ GtkDialog *dialog,
gboolean simple);
gboolean tpaw_account_widget_contains_pending_changes