mouse: Make a GtkTemplate for the panel

This commit is contained in:
Robert Ancell 2018-11-09 12:02:08 +13:00
parent 354c297c85
commit 37e7fd6ada
5 changed files with 64 additions and 40 deletions

View file

@ -21,20 +21,21 @@
*
*/
#include "cc-mouse-panel.h"
#include "cc-mouse-resources.h"
#include "gnome-mouse-properties.h"
#include "gnome-mouse-test.h"
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include "cc-mouse-panel.h"
#include "cc-mouse-resources.h"
#include "gnome-mouse-properties.h"
#include "gnome-mouse-test.h"
struct _CcMousePanel
{
CcPanel parent_instance;
CcPanel parent_instance;
GtkWidget *stack;
CcMouseProperties *mouse_properties;
CcMouseTest *mouse_test;
GtkStack *stack;
GtkButton *test_button;
};
CC_PANEL_REGISTER (CcMousePanel, cc_mouse_panel)
@ -52,67 +53,55 @@ cc_mouse_panel_get_help_uri (CcPanel *panel)
}
static void
shell_test_button_toggled (GtkToggleButton *button, CcMousePanel *panel)
test_button_toggled_cb (CcMousePanel *self)
{
gboolean active;
active = gtk_toggle_button_get_active (button);
gtk_stack_set_visible_child_name (GTK_STACK (panel->stack), active ? "test_widget" : "prefs_widget");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->test_button)))
gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->mouse_test));
else
gtk_stack_set_visible_child (self->stack, GTK_WIDGET (self->mouse_properties));
}
static void
cc_mouse_panel_constructed (GObject *object)
{
CcMousePanel *self = CC_MOUSE_PANEL (object);
GtkWidget *button;
CcShell *shell;
G_OBJECT_CLASS (cc_mouse_panel_parent_class)->constructed (object);
/* Add test area button to shell header. */
shell = cc_panel_get_shell (CC_PANEL (self));
button = gtk_toggle_button_new_with_mnemonic (_("Test Your _Settings"));
gtk_style_context_add_class (gtk_widget_get_style_context (button),
"text-button");
gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
gtk_widget_set_visible (button, TRUE);
cc_shell_embed_widget_in_header (shell, button, GTK_POS_RIGHT);
g_signal_connect (GTK_BUTTON (button), "toggled",
G_CALLBACK (shell_test_button_toggled),
self);
cc_shell_embed_widget_in_header (shell, GTK_WIDGET (self->test_button), GTK_POS_RIGHT);
}
static void
cc_mouse_panel_init (CcMousePanel *self)
{
GtkWidget *prefs_widget, *test_widget;
g_resources_register (cc_mouse_get_resource ());
prefs_widget = cc_mouse_properties_new ();
gtk_widget_show (prefs_widget);
test_widget = cc_mouse_test_new ();
gtk_widget_show (test_widget);
self->stack = gtk_stack_new ();
gtk_widget_show (self->stack);
gtk_stack_add_named (GTK_STACK (self->stack), prefs_widget, "prefs_widget");
gtk_stack_add_named (GTK_STACK (self->stack), test_widget, "test_widget");
gtk_container_add (GTK_CONTAINER (self), self->stack);
cc_mouse_properties_get_type ();
cc_mouse_test_get_type ();
gtk_widget_init_template (GTK_WIDGET (self));
}
static void
cc_mouse_panel_class_init (CcMousePanelClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
CcPanelClass *panel_class = CC_PANEL_CLASS (klass);
panel_class->get_help_uri = cc_mouse_panel_get_help_uri;
object_class->dispose = cc_mouse_panel_dispose;
object_class->constructed = cc_mouse_panel_constructed;
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/mouse/cc-mouse-panel.ui");
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_properties);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, mouse_test);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, stack);
gtk_widget_class_bind_template_child (widget_class, CcMousePanel, test_button);
gtk_widget_class_bind_template_callback (widget_class, test_button_toggled_cb);
}

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<template class="CcMousePanel" parent="CcPanel">
<property name="visible">True</property>
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<child>
<object class="CcMouseProperties" id="mouse_properties">
<property name="visible">True</property>
</object>
</child>
<child>
<object class="CcMouseTest" id="mouse_test">
<property name="visible">True</property>
</object>
</child>
</object>
</child>
</template>
<object class="GtkToggleButton" id="test_button">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Test Your _Settings</property>
<signal name="toggled" handler="test_button_toggled_cb" object="CcMousePanel" swapped="yes"/>
<style>
<class name="text-button"/>
</style>
</object>
</interface>

View file

@ -18,6 +18,7 @@ i18n.merge_file(
)
resource_data = files(
'cc-mouse-panel.ui',
'gnome-mouse-properties.ui',
'gnome-mouse-test.ui',
'scroll-test-gegl.svg',

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/gnome/control-center/mouse">
<file preprocess="xml-stripblanks">cc-mouse-panel.ui</file>
<file preprocess="xml-stripblanks">gnome-mouse-properties.ui</file>
<file preprocess="xml-stripblanks">gnome-mouse-test.ui</file>
<file>scroll-test.svg</file>

View file

@ -60,7 +60,8 @@ panels/keyboard/cc-keyboard-shortcut-editor.c
panels/keyboard/cc-keyboard-shortcut-editor.ui
panels/keyboard/gnome-keyboard-panel.desktop.in.in
panels/keyboard/keyboard-shortcuts.c
panels/mouse/cc-mouse-panel.c
panels/keyboard/shortcut-editor.ui
panels/mouse/cc-mouse-panel.ui
panels/mouse/gnome-mouse-panel.desktop.in.in
panels/mouse/gnome-mouse-properties.c
panels/mouse/gnome-mouse-properties.ui