summaryrefslogtreecommitdiffstats
path: root/panels/multitasking/cc-multitasking-panel.c
diff options
context:
space:
mode:
Diffstat (limited to 'panels/multitasking/cc-multitasking-panel.c')
-rw-r--r--panels/multitasking/cc-multitasking-panel.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/panels/multitasking/cc-multitasking-panel.c b/panels/multitasking/cc-multitasking-panel.c
new file mode 100644
index 0000000..db4c47a
--- /dev/null
+++ b/panels/multitasking/cc-multitasking-panel.c
@@ -0,0 +1,161 @@
+/* cc-multitasking-panel.h
+ *
+ * Copyright 2020 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+
+#include "cc-multitasking-panel.h"
+
+#include "cc-multitasking-resources.h"
+#include "cc-multitasking-row.h"
+
+struct _CcMultitaskingPanel
+{
+ CcPanel parent_instance;
+
+ GSettings *interface_settings;
+ GSettings *mutter_settings;
+ GSettings *shell_settings;
+ GSettings *wm_settings;
+
+ GtkPicture *active_screen_edges_picture;
+ GtkSwitch *active_screen_edges_switch;
+ GtkCheckButton *all_workspaces_radio;
+ GtkCheckButton *current_workspace_radio;
+ GtkCheckButton *dynamic_workspaces_radio;
+ GtkCheckButton *fixed_workspaces_radio;
+ GtkPicture *hot_corner_picture;
+ GtkSwitch *hot_corner_switch;
+ GtkSpinButton *number_of_workspaces_spin;
+ GtkCheckButton *workspaces_primary_display_radio;
+ GtkCheckButton *workspaces_span_displays_radio;
+};
+
+CC_PANEL_REGISTER (CcMultitaskingPanel, cc_multitasking_panel)
+
+/* GObject overrides */
+
+static void
+cc_multitasking_panel_finalize (GObject *object)
+{
+ CcMultitaskingPanel *self = (CcMultitaskingPanel *)object;
+
+ g_clear_object (&self->interface_settings);
+ g_clear_object (&self->mutter_settings);
+ g_clear_object (&self->shell_settings);
+ g_clear_object (&self->wm_settings);
+
+ G_OBJECT_CLASS (cc_multitasking_panel_parent_class)->finalize (object);
+}
+
+static void
+cc_multitasking_panel_class_init (CcMultitaskingPanelClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ g_type_ensure (CC_TYPE_MULTITASKING_ROW);
+
+ object_class->finalize = cc_multitasking_panel_finalize;
+
+ gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/multitasking/cc-multitasking-panel.ui");
+
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_picture);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, active_screen_edges_switch);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, all_workspaces_radio);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, current_workspace_radio);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, dynamic_workspaces_radio);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, fixed_workspaces_radio);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, hot_corner_picture);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, hot_corner_switch);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, number_of_workspaces_spin);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, workspaces_primary_display_radio);
+ gtk_widget_class_bind_template_child (widget_class, CcMultitaskingPanel, workspaces_span_displays_radio);
+}
+
+static void
+cc_multitasking_panel_init (CcMultitaskingPanel *self)
+{
+ g_resources_register (cc_multitasking_get_resource ());
+
+ gtk_widget_init_template (GTK_WIDGET (self));
+
+ self->interface_settings = g_settings_new ("org.gnome.desktop.interface");
+ g_settings_bind (self->interface_settings,
+ "enable-hot-corners",
+ self->hot_corner_switch,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ self->mutter_settings = g_settings_new ("org.gnome.mutter");
+
+ if (g_settings_get_boolean (self->mutter_settings, "workspaces-only-on-primary"))
+ gtk_check_button_set_active (self->workspaces_primary_display_radio, TRUE);
+ else
+ gtk_check_button_set_active (self->workspaces_span_displays_radio, TRUE);
+
+ g_settings_bind (self->mutter_settings,
+ "workspaces-only-on-primary",
+ self->workspaces_primary_display_radio,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (self->mutter_settings,
+ "edge-tiling",
+ self->active_screen_edges_switch,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ if (g_settings_get_boolean (self->mutter_settings, "dynamic-workspaces"))
+ gtk_check_button_set_active (self->dynamic_workspaces_radio, TRUE);
+ else
+ gtk_check_button_set_active (self->fixed_workspaces_radio, TRUE);
+
+ g_settings_bind (self->mutter_settings,
+ "dynamic-workspaces",
+ self->dynamic_workspaces_radio,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ self->wm_settings = g_settings_new ("org.gnome.desktop.wm.preferences");
+ g_settings_bind (self->wm_settings,
+ "num-workspaces",
+ self->number_of_workspaces_spin,
+ "value",
+ G_SETTINGS_BIND_DEFAULT);
+
+ self->shell_settings = g_settings_new ("org.gnome.shell.app-switcher");
+
+ if (g_settings_get_boolean (self->shell_settings, "current-workspace-only"))
+ gtk_check_button_set_active (self->current_workspace_radio, TRUE);
+ else
+ gtk_check_button_set_active (self->all_workspaces_radio, TRUE);
+
+ g_settings_bind (self->shell_settings,
+ "current-workspace-only",
+ self->current_workspace_radio,
+ "active",
+ G_SETTINGS_BIND_DEFAULT);
+
+ if (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL)
+ {
+ gtk_picture_set_resource (self->hot_corner_picture,
+ "/org/gnome/control-center/multitasking/assets/hot-corner-rtl.svg");
+ gtk_picture_set_resource (self->active_screen_edges_picture,
+ "/org/gnome/control-center/multitasking/assets/active-screen-edges-rtl.svg");
+ }
+}