From ae1c76ff830d146d41e88d6fba724c0a54bce868 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:45:20 +0200 Subject: Adding upstream version 1:43.6. Signed-off-by: Daniel Baumann --- panels/multitasking/cc-multitasking-panel.c | 161 ++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 panels/multitasking/cc-multitasking-panel.c (limited to 'panels/multitasking/cc-multitasking-panel.c') 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 + * + * 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 . + * + * 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"); + } +} -- cgit v1.2.3