mouse: use a dialog window for the mouse test
This avoids using a toggle button to switch to the test area and makes the interaction more consistent with other panels. https://bugzilla.gnome.org/show_bug.cgi?id=702986
This commit is contained in:
parent
1a085fe68c
commit
a98b939e47
2 changed files with 41 additions and 32 deletions
|
@ -39,7 +39,7 @@ CC_PANEL_REGISTER (CcMousePanel, cc_mouse_panel)
|
||||||
struct _CcMousePanelPrivate
|
struct _CcMousePanelPrivate
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
GtkBuilder *builder;
|
||||||
GtkWidget *widget;
|
GtkWidget *test_dialog;
|
||||||
GtkWidget *prefs_widget;
|
GtkWidget *prefs_widget;
|
||||||
GtkWidget *test_widget;
|
GtkWidget *test_widget;
|
||||||
GtkWidget *shell_header;
|
GtkWidget *shell_header;
|
||||||
|
@ -57,6 +57,12 @@ cc_mouse_panel_dispose (GObject *object)
|
||||||
|
|
||||||
g_clear_object (&priv->shell_header);
|
g_clear_object (&priv->shell_header);
|
||||||
|
|
||||||
|
if (priv->test_dialog)
|
||||||
|
{
|
||||||
|
gtk_widget_destroy (priv->test_dialog);
|
||||||
|
priv->test_dialog = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (cc_mouse_panel_parent_class)->dispose (object);
|
G_OBJECT_CLASS (cc_mouse_panel_parent_class)->dispose (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,43 +72,53 @@ cc_mouse_panel_get_help_uri (CcPanel *panel)
|
||||||
return "help:gnome-help/mouse";
|
return "help:gnome-help/mouse";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Toggle between mouse panel properties and testing area. */
|
|
||||||
static void
|
static void
|
||||||
shell_test_button_toggle_event (GtkToggleButton *button, CcMousePanel *panel)
|
shell_test_button_clicked (GtkButton *button, CcMousePanel *panel)
|
||||||
{
|
{
|
||||||
GtkNotebook *notebook = GTK_NOTEBOOK (panel->priv->widget);
|
CcMousePanelPrivate *priv = panel->priv;
|
||||||
gint page_num;
|
|
||||||
gboolean active;
|
|
||||||
|
|
||||||
active = gtk_toggle_button_get_active (button);
|
/* GTK_RESPONSE_NONE is returned if the dialog is being destroyed, so only
|
||||||
page_num = active ? CC_MOUSE_PAGE_TEST : CC_MOUSE_PAGE_PREFS;
|
* hide the dialog if it is not being destroyed */
|
||||||
|
if (gtk_dialog_run (GTK_DIALOG (priv->test_dialog)) != GTK_RESPONSE_NONE)
|
||||||
gtk_notebook_set_current_page (notebook, page_num);
|
gtk_widget_hide (priv->test_dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cc_mouse_panel_constructed (GObject *object)
|
cc_mouse_panel_constructed (GObject *object)
|
||||||
{
|
{
|
||||||
CcMousePanel *self = CC_MOUSE_PANEL (object);
|
CcMousePanel *self = CC_MOUSE_PANEL (object);
|
||||||
GtkWidget *box, *button;
|
CcMousePanelPrivate *priv = self->priv;
|
||||||
|
GtkWidget *box, *button, *container, *toplevel;
|
||||||
|
CcShell *shell;
|
||||||
|
|
||||||
G_OBJECT_CLASS (cc_mouse_panel_parent_class)->constructed (object);
|
G_OBJECT_CLASS (cc_mouse_panel_parent_class)->constructed (object);
|
||||||
|
|
||||||
/* Add test area toggle to shell header. */
|
/* Add test area button to shell header. */
|
||||||
|
shell = cc_panel_get_shell (CC_PANEL (self));
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
|
||||||
|
|
||||||
button = gtk_toggle_button_new_with_mnemonic (_("Test Your _Settings"));
|
button = gtk_button_new_with_mnemonic (_("Test Your _Settings"));
|
||||||
gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
|
gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 0);
|
||||||
gtk_widget_set_visible (button, TRUE);
|
gtk_widget_set_visible (button, TRUE);
|
||||||
|
|
||||||
cc_shell_embed_widget_in_header (cc_panel_get_shell (CC_PANEL (self)), box);
|
cc_shell_embed_widget_in_header (shell, box);
|
||||||
gtk_widget_set_visible (box, TRUE);
|
gtk_widget_set_visible (box, TRUE);
|
||||||
|
|
||||||
self->priv->shell_header = g_object_ref (box);
|
priv->shell_header = g_object_ref (box);
|
||||||
|
|
||||||
g_signal_connect (GTK_BUTTON (button), "toggled",
|
g_signal_connect (GTK_BUTTON (button), "clicked",
|
||||||
G_CALLBACK (shell_test_button_toggle_event),
|
G_CALLBACK (shell_test_button_clicked),
|
||||||
self);
|
self);
|
||||||
|
|
||||||
|
toplevel = cc_shell_get_toplevel (shell);
|
||||||
|
priv->test_dialog = gtk_dialog_new_with_buttons (_("Test Your Settings"),
|
||||||
|
GTK_WINDOW (toplevel),
|
||||||
|
GTK_DIALOG_MODAL,
|
||||||
|
_("_Done"), GTK_RESPONSE_ACCEPT, NULL);
|
||||||
|
gtk_window_set_resizable (GTK_WINDOW (priv->test_dialog), FALSE);
|
||||||
|
|
||||||
|
container = gtk_dialog_get_content_area (GTK_DIALOG (priv->test_dialog));
|
||||||
|
gtk_container_add (GTK_CONTAINER (container), priv->test_widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -116,21 +132,14 @@ cc_mouse_panel_init (CcMousePanel *self)
|
||||||
priv->prefs_widget = cc_mouse_properties_new ();
|
priv->prefs_widget = cc_mouse_properties_new ();
|
||||||
priv->test_widget = cc_mouse_test_new ();
|
priv->test_widget = cc_mouse_test_new ();
|
||||||
|
|
||||||
priv->widget = gtk_notebook_new ();
|
gtk_widget_set_margin_left (priv->prefs_widget, 6);
|
||||||
gtk_widget_set_margin_left (priv->widget, 6);
|
gtk_widget_set_margin_right (priv->prefs_widget, 6);
|
||||||
gtk_widget_set_margin_right (priv->widget, 6);
|
gtk_widget_set_margin_top (priv->prefs_widget, 6);
|
||||||
gtk_widget_set_margin_top (priv->widget, 6);
|
gtk_widget_set_margin_bottom (priv->prefs_widget, 6);
|
||||||
gtk_widget_set_margin_bottom (priv->widget, 6);
|
|
||||||
gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->widget), FALSE);
|
|
||||||
gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->widget), FALSE);
|
|
||||||
|
|
||||||
gtk_notebook_append_page (GTK_NOTEBOOK (priv->widget), priv->prefs_widget, NULL);
|
gtk_container_add (GTK_CONTAINER (self), priv->prefs_widget);
|
||||||
gtk_notebook_append_page (GTK_NOTEBOOK (priv->widget), priv->test_widget, NULL);
|
|
||||||
|
|
||||||
gtk_container_add (GTK_CONTAINER (self), priv->widget);
|
|
||||||
gtk_widget_show (priv->prefs_widget);
|
gtk_widget_show (priv->prefs_widget);
|
||||||
gtk_widget_show (priv->test_widget);
|
gtk_widget_show (priv->test_widget);
|
||||||
gtk_widget_show (priv->widget);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkGrid" id="test_widget">
|
<object class="GtkGrid" id="test_widget">
|
||||||
<property name="height_request">400</property>
|
<property name="height_request">540</property>
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="hexpand">True</property>
|
<property name="hexpand">True</property>
|
||||||
|
@ -56,8 +56,8 @@
|
||||||
<object class="GtkImage" id="image">
|
<object class="GtkImage" id="image">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
<property name="margin_left">35</property>
|
<property name="margin_left">25</property>
|
||||||
<property name="margin_right">35</property>
|
<property name="margin_right">25</property>
|
||||||
<property name="pixbuf">scroll-test.svg</property>
|
<property name="pixbuf">scroll-test.svg</property>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue