multitasking: Port to GTK4

This commit is contained in:
Georges Basile Stavracas Neto 2021-10-20 23:42:46 -03:00
parent a0d49cb3a8
commit 6cfd6e0652
7 changed files with 100 additions and 264 deletions

View file

@ -15,7 +15,7 @@ panels = [
'lock',
'microphone',
# 'mouse',
# 'multitasking',
'multitasking',
'notifications',
# 'online-accounts',
'power',

View file

@ -23,7 +23,6 @@
#include "cc-multitasking-resources.h"
#include "cc-multitasking-row.h"
#include "list-box-helper.h"
struct _CcMultitaskingPanel
{
@ -35,13 +34,13 @@ struct _CcMultitaskingPanel
GSettings *wm_settings;
GtkSwitch *active_screen_edges_switch;
GtkToggleButton *current_workspace_radio;
GtkToggleButton *dynamic_workspaces_radio;
GtkToggleButton *fixed_workspaces_radio;
GtkCheckButton *current_workspace_radio;
GtkCheckButton *dynamic_workspaces_radio;
GtkCheckButton *fixed_workspaces_radio;
GtkSwitch *hot_corner_switch;
GtkSpinButton *number_of_workspaces_spin;
GtkToggleButton *workspaces_primary_display_radio;
GtkToggleButton *workspaces_span_displays_radio;
GtkCheckButton *workspaces_primary_display_radio;
GtkCheckButton *workspaces_span_displays_radio;
};
CC_PANEL_REGISTER (CcMultitaskingPanel, cc_multitasking_panel)
@ -100,9 +99,9 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self)
self->mutter_settings = g_settings_new ("org.gnome.mutter");
if (g_settings_get_boolean (self->mutter_settings, "workspaces-only-on-primary"))
gtk_toggle_button_set_active (self->workspaces_primary_display_radio, TRUE);
gtk_check_button_set_active (self->workspaces_primary_display_radio, TRUE);
else
gtk_toggle_button_set_active (self->workspaces_span_displays_radio, TRUE);
gtk_check_button_set_active (self->workspaces_span_displays_radio, TRUE);
g_settings_bind (self->mutter_settings,
"workspaces-only-on-primary",
@ -116,9 +115,9 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self)
G_SETTINGS_BIND_DEFAULT);
if (g_settings_get_boolean (self->mutter_settings, "dynamic-workspaces"))
gtk_toggle_button_set_active (self->dynamic_workspaces_radio, TRUE);
gtk_check_button_set_active (self->dynamic_workspaces_radio, TRUE);
else
gtk_toggle_button_set_active (self->fixed_workspaces_radio, TRUE);
gtk_check_button_set_active (self->fixed_workspaces_radio, TRUE);
g_settings_bind (self->mutter_settings,
"dynamic-workspaces",
@ -136,7 +135,7 @@ cc_multitasking_panel_init (CcMultitaskingPanel *self)
self->shell_settings = g_settings_new ("org.gnome.shell.app-switcher");
if (g_settings_get_boolean (self->shell_settings, "current-workspace-only"))
gtk_toggle_button_set_active (self->current_workspace_radio, TRUE);
gtk_check_button_set_active (self->current_workspace_radio, TRUE);
g_settings_bind (self->shell_settings,
"current-workspace-only",

View file

@ -1,14 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="CcMultitaskingPanel" parent="CcPanel">
<property name="visible">True</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">true</property>
<property name="hscrollbar-policy">never</property>
<child>
<object class="HdyClamp">
<property name="visible">True</property>
<object class="AdwClamp">
<property name="maximum-size">600</property>
<property name="tightening-threshold">400</property>
<property name="margin_top">32</property>
@ -18,16 +15,12 @@
<child>
<object class="GtkBox">
<property name="visible">true</property>
<property name="can-focus">false</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
<!-- General -->
<child>
<object class="GtkLabel">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="label" translatable="yes">General</property>
<property name="xalign">0.0</property>
<attributes>
@ -38,8 +31,6 @@
<child>
<object class="GtkListBox">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="selection-mode">none</property>
<property name="margin-bottom">24</property>
@ -50,7 +41,6 @@
<!-- Hot Corner -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">hot_corner_switch</property>
<property name="title" translatable="yes">_Hot Corner</property>
@ -58,18 +48,20 @@
<property name="use_underline">True</property>
<child>
<object class="GtkSwitch" id="hot_corner_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
</child>
<child type="artwork">
<object class="GtkImage">
<property name="visible">True</property>
<object class="GtkPicture">
<property name="hexpand">True</property>
<property name="halign">center</property>
<property name="margin">18</property>
<property name="resource">/org/gnome/control-center/multitasking/assets/hot-corner.svg</property>
<property name="margin-top">18</property>
<property name="margin-bottom">18</property>
<property name="margin-start">18</property>
<property name="margin-end">18</property>
<property name="can-shrink">False</property>
<property name="file">resource:///org/gnome/control-center/multitasking/assets/hot-corner.svg</property>
</object>
</child>
</object>
@ -78,7 +70,6 @@
<!-- Active Screen Edges -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">active_screen_edges_switch</property>
<property name="title" translatable="yes">_Active Screen Edges</property>
@ -86,18 +77,20 @@
<property name="use_underline">True</property>
<child>
<object class="GtkSwitch" id="active_screen_edges_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
</child>
<child type="artwork">
<object class="GtkImage">
<property name="visible">True</property>
<object class="GtkPicture">
<property name="hexpand">True</property>
<property name="halign">center</property>
<property name="margin">18</property>
<property name="resource">/org/gnome/control-center/multitasking/assets/active-screen-edges.svg</property>
<property name="margin-top">18</property>
<property name="margin-bottom">18</property>
<property name="margin-start">18</property>
<property name="margin-end">18</property>
<property name="can-shrink">False</property>
<property name="file">resource:///org/gnome/control-center/multitasking/assets/active-screen-edges.svg</property>
</object>
</child>
</object>
@ -109,8 +102,6 @@
<!-- Workspaces -->
<child>
<object class="GtkLabel">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="label" translatable="yes">Workspaces</property>
<property name="xalign">0.0</property>
<attributes>
@ -121,8 +112,6 @@
<child>
<object class="GtkListBox">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="selection-mode">none</property>
<property name="margin-bottom">18</property>
@ -133,15 +122,13 @@
<!-- Dynamic Workspaces -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">dynamic_workspaces_radio</property>
<property name="title" translatable="yes">_Dynamic workspaces</property>
<property name="subtitle" translatable="yes">Automatically removes empty workspaces.</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="dynamic_workspaces_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="dynamic_workspaces_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
@ -152,15 +139,13 @@
<!-- Fixed Number of Workspaces -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">fixed_workspaces_radio</property>
<property name="title" translatable="yes">_Fixed number of workspaces</property>
<property name="subtitle" translatable="yes">Specify a number of permanent workspaces.</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="fixed_workspaces_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="fixed_workspaces_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
<property name="group">dynamic_workspaces_radio</property>
@ -172,7 +157,6 @@
<!-- Number of Workspaces -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="sensitive" bind-source="fixed_workspaces_radio" bind-property="active" bind-flags="default|sync-create" />
<property name="activatable-widget">number_of_workspaces_spin</property>
@ -180,7 +164,6 @@
<property name="use_underline">True</property>
<child>
<object class="GtkSpinButton" id="number_of_workspaces_spin">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="valign">center</property>
<property name="adjustment">workspaces_adjustment</property>
@ -195,8 +178,6 @@
<!-- Multi-Monitor -->
<child>
<object class="GtkLabel">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="label" translatable="yes">Multi-Monitor</property>
<property name="xalign">0.0</property>
<attributes>
@ -207,8 +188,6 @@
<child>
<object class="GtkListBox">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="selection-mode">none</property>
<property name="margin-bottom">18</property>
@ -219,25 +198,26 @@
<!-- Primary Display -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">workspaces_primary_display_radio</property>
<property name="title" translatable="yes">Workspaces on _primary display only</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="workspaces_primary_display_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="workspaces_primary_display_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
</child>
<child type="artwork">
<object class="GtkImage">
<property name="visible">True</property>
<object class="GtkPicture">
<property name="hexpand">True</property>
<property name="halign">center</property>
<property name="margin">18</property>
<property name="resource">/org/gnome/control-center/multitasking/assets/workspaces-primary-display.svg</property>
<property name="margin-top">18</property>
<property name="margin-bottom">18</property>
<property name="margin-start">18</property>
<property name="margin-end">18</property>
<property name="can-shrink">False</property>
<property name="file">resource:///org/gnome/control-center/multitasking/assets/workspaces-primary-display.svg</property>
</object>
</child>
</object>
@ -246,26 +226,27 @@
<!-- Span Displays -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">workspaces_span_displays_radio</property>
<property name="title" translatable="yes">Workspaces on all d_isplays</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="workspaces_span_displays_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="workspaces_span_displays_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
<property name="group">workspaces_primary_display_radio</property>
</object>
</child>
<child type="artwork">
<object class="GtkImage">
<property name="visible">True</property>
<object class="GtkPicture">
<property name="hexpand">True</property>
<property name="halign">center</property>
<property name="margin">18</property>
<property name="resource">/org/gnome/control-center/multitasking/assets/workspaces-span-displays.svg</property>
<property name="margin-top">18</property>
<property name="margin-bottom">18</property>
<property name="margin-start">18</property>
<property name="margin-end">18</property>
<property name="can-shrink">False</property>
<property name="file">resource:///org/gnome/control-center/multitasking/assets/workspaces-span-displays.svg</property>
</object>
</child>
</object>
@ -277,8 +258,6 @@
<!-- Application Switching -->
<child>
<object class="GtkLabel">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="label" translatable="yes">Application Switching</property>
<property name="xalign">0.0</property>
<attributes>
@ -289,8 +268,6 @@
<child>
<object class="GtkListBox">
<property name="visible">true</property>
<property name="can-focus">true</property>
<property name="selection-mode">none</property>
<property name="margin-bottom">18</property>
@ -301,14 +278,12 @@
<!-- All Workspaces -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">all_workspaces_radio</property>
<property name="title" translatable="yes">Include applications from all _workspaces</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="all_workspaces_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="all_workspaces_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
</object>
@ -319,14 +294,12 @@
<!-- Current Workspace -->
<child>
<object class="CcMultitaskingRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable-widget">current_workspace_radio</property>
<property name="title" translatable="yes">Include applications from the _current workspace only</property>
<property name="use_underline">True</property>
<child type="prefix">
<object class="GtkRadioButton" id="current_workspace_radio">
<property name="visible">True</property>
<object class="GtkCheckButton" id="current_workspace_radio">
<property name="can_focus">True</property>
<property name="valign">center</property>
<property name="group">all_workspaces_radio</property>

View file

@ -23,7 +23,7 @@
struct _CcMultitaskingRow
{
HdyPreferencesRow parent;
AdwPreferencesRow parent;
GtkBox *artwork_box;
GtkBox *header;
@ -42,9 +42,11 @@ struct _CcMultitaskingRow
GtkWidget *activatable_widget;
};
static GtkBuildableIface *parent_buildable_iface;
static void cc_multitasking_row_buildable_init (GtkBuildableIface *iface);
G_DEFINE_TYPE_WITH_CODE (CcMultitaskingRow, cc_multitasking_row, HDY_TYPE_PREFERENCES_ROW,
G_DEFINE_TYPE_WITH_CODE (CcMultitaskingRow, cc_multitasking_row, ADW_TYPE_PREFERENCES_ROW,
G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, cc_multitasking_row_buildable_init))
enum
@ -181,145 +183,10 @@ cc_multitasking_row_dispose (GObject *object)
self->previous_parent = NULL;
}
G_OBJECT_CLASS (cc_multitasking_row_parent_class)->dispose (object);
}
static void
cc_multitasking_row_show_all (GtkWidget *widget)
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (widget);
g_return_if_fail (CC_IS_MULTITASKING_ROW (self));
gtk_container_foreach (GTK_CONTAINER (self->prefixes),
(GtkCallback) gtk_widget_show_all,
NULL);
gtk_container_foreach (GTK_CONTAINER (self->suffixes),
(GtkCallback) gtk_widget_show_all,
NULL);
GTK_WIDGET_CLASS (cc_multitasking_row_parent_class)->show_all (widget);
}
static void
cc_multitasking_row_destroy (GtkWidget *widget)
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (widget);
if (self->header)
{
gtk_widget_destroy (GTK_WIDGET (self->header));
self->header = NULL;
}
cc_multitasking_row_set_activatable_widget (self, NULL);
g_clear_pointer ((GtkWidget**)&self->header, gtk_widget_unparent);
self->prefixes = NULL;
self->suffixes = NULL;
GTK_WIDGET_CLASS (cc_multitasking_row_parent_class)->destroy (widget);
}
static void
cc_multitasking_row_add (GtkContainer *container,
GtkWidget *child)
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (container);
/* When constructing the widget, we want the box to be added as the child of
* the GtkListBoxRow, as an implementation detail.
*/
if (!self->header)
{
GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->add (container, child);
}
else
{
gtk_container_add (GTK_CONTAINER (self->suffixes), child);
gtk_widget_show (GTK_WIDGET (self->suffixes));
}
}
static void
cc_multitasking_row_remove (GtkContainer *container,
GtkWidget *child)
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (container);
if (child == GTK_WIDGET (self->header))
GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->remove (container, child);
else if (gtk_widget_get_parent (child) == GTK_WIDGET (self->prefixes))
gtk_container_remove (GTK_CONTAINER (self->prefixes), child);
else
gtk_container_remove (GTK_CONTAINER (self->suffixes), child);
}
typedef struct {
CcMultitaskingRow *row;
GtkCallback callback;
gpointer callback_data;
} ForallData;
static void
for_non_internal_child (GtkWidget *widget,
gpointer callback_data)
{
ForallData *data = callback_data;
CcMultitaskingRow *self = data->row;
if (widget != (GtkWidget *) self->image &&
widget != (GtkWidget *) self->prefixes &&
widget != (GtkWidget *) self->suffixes &&
widget != (GtkWidget *) self->title_box)
{
data->callback (widget, data->callback_data);
}
}
static void
cc_multitasking_row_forall (GtkContainer *container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data)
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (container);
ForallData data;
if (include_internals)
{
GTK_CONTAINER_CLASS (cc_multitasking_row_parent_class)->forall (GTK_CONTAINER (self),
include_internals,
callback,
callback_data);
return;
}
data.row = self;
data.callback = callback;
data.callback_data = callback_data;
if (self->prefixes)
{
GTK_CONTAINER_GET_CLASS (self->prefixes)->forall (GTK_CONTAINER (self->prefixes),
include_internals,
for_non_internal_child,
&data);
}
if (self->suffixes)
{
GTK_CONTAINER_GET_CLASS (self->suffixes)->forall (GTK_CONTAINER (self->suffixes),
include_internals,
for_non_internal_child,
&data);
}
if (self->header)
{
GTK_CONTAINER_GET_CLASS (self->header)->forall (GTK_CONTAINER (self->header),
include_internals,
for_non_internal_child,
&data);
}
G_OBJECT_CLASS (cc_multitasking_row_parent_class)->dispose (object);
}
static void
@ -327,19 +194,11 @@ cc_multitasking_row_class_init (CcMultitaskingRowClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
object_class->get_property = cc_multitasking_row_get_property;
object_class->set_property = cc_multitasking_row_set_property;
object_class->dispose = cc_multitasking_row_dispose;
widget_class->destroy = cc_multitasking_row_destroy;
widget_class->show_all = cc_multitasking_row_show_all;
container_class->add = cc_multitasking_row_add;
container_class->remove = cc_multitasking_row_remove;
container_class->forall = cc_multitasking_row_forall;
props[PROP_ICON_NAME] =
g_param_spec_string ("icon-name",
"Icon name",
@ -447,19 +306,25 @@ cc_multitasking_row_buildable_add_child (GtkBuildable *buildable,
{
CcMultitaskingRow *self = CC_MULTITASKING_ROW (buildable);
if (self->header == NULL || !type)
gtk_container_add (GTK_CONTAINER (self), GTK_WIDGET (child));
if (!self->header)
parent_buildable_iface->add_child (buildable, builder, child, type);
else if (type && strcmp (type, "prefix") == 0)
cc_multitasking_row_add_prefix (self, GTK_WIDGET (child));
else if (type && strcmp (type, "artwork") == 0)
cc_multitasking_row_add_artwork(self, GTK_WIDGET (child));
cc_multitasking_row_add_artwork (self, GTK_WIDGET (child));
else if (!type && GTK_IS_WIDGET (child))
{
gtk_box_append (self->suffixes, GTK_WIDGET (child));
gtk_widget_show (GTK_WIDGET (self->suffixes));
}
else
GTK_BUILDER_WARN_INVALID_CHILD_TYPE (self, type);
parent_buildable_iface->add_child (buildable, builder, child, type);
}
static void
cc_multitasking_row_buildable_init (GtkBuildableIface *iface)
{
parent_buildable_iface = g_type_interface_peek_parent (iface);
iface->add_child = cc_multitasking_row_buildable_add_child;
}
@ -490,13 +355,9 @@ cc_multitasking_row_set_subtitle (CcMultitaskingRow *self,
const gchar *
cc_multitasking_row_get_icon_name (CcMultitaskingRow *self)
{
const gchar *icon_name;
g_return_val_if_fail (CC_IS_MULTITASKING_ROW (self), NULL);
gtk_image_get_icon_name (self->image, &icon_name, NULL);
return icon_name;
return gtk_image_get_icon_name (self->image);
}
void
@ -507,11 +368,11 @@ cc_multitasking_row_set_icon_name (CcMultitaskingRow *self,
g_return_if_fail (CC_IS_MULTITASKING_ROW (self));
gtk_image_get_icon_name (self->image, &old_icon_name, NULL);
old_icon_name = gtk_image_get_icon_name (self->image);
if (g_strcmp0 (old_icon_name, icon_name) == 0)
return;
gtk_image_set_from_icon_name (self->image, icon_name, GTK_ICON_SIZE_INVALID);
gtk_image_set_from_icon_name (self->image, icon_name);
gtk_widget_set_visible (GTK_WIDGET (self->image),
icon_name != NULL && g_strcmp0 (icon_name, "") != 0);
@ -584,7 +445,7 @@ cc_multitasking_row_set_use_underline (CcMultitaskingRow *self,
return;
self->use_underline = use_underline;
hdy_preferences_row_set_use_underline (HDY_PREFERENCES_ROW (self), self->use_underline);
adw_preferences_row_set_use_underline (ADW_PREFERENCES_ROW (self), self->use_underline);
gtk_label_set_use_underline (self->title, self->use_underline);
gtk_label_set_use_underline (self->subtitle, self->use_underline);
gtk_label_set_mnemonic_widget (self->title, GTK_WIDGET (self));
@ -652,7 +513,7 @@ cc_multitasking_row_add_prefix (CcMultitaskingRow *self,
g_return_if_fail (CC_IS_MULTITASKING_ROW (self));
g_return_if_fail (GTK_IS_WIDGET (self));
gtk_box_pack_start (self->prefixes, widget, FALSE, TRUE, 0);
gtk_box_append (self->prefixes, widget);
gtk_widget_show (GTK_WIDGET (self->prefixes));
}
@ -668,7 +529,7 @@ cc_multitasking_row_add_artwork (CcMultitaskingRow *self,
*/
gtk_widget_set_margin_top (GTK_WIDGET (self->header), 12);
gtk_box_pack_start (self->artwork_box, widget, FALSE, TRUE, 0);
gtk_box_append (self->artwork_box, widget);
gtk_widget_show (GTK_WIDGET (self->artwork_box));
}
@ -682,3 +543,25 @@ cc_multitasking_row_activate (CcMultitaskingRow *self)
g_signal_emit (self, signals[SIGNAL_ACTIVATED], 0);
}
void
cc_multitasking_row_remove (CcMultitaskingRow *self,
GtkWidget *child)
{
GtkWidget *parent;
g_return_if_fail (CC_IS_MULTITASKING_ROW (self));
g_return_if_fail (GTK_IS_WIDGET (child));
parent = gtk_widget_get_parent (child);
if (parent == GTK_WIDGET (self->prefixes))
gtk_box_remove (self->prefixes, child);
else if (parent == GTK_WIDGET (self->suffixes))
gtk_box_remove (self->suffixes, child);
else if (parent == GTK_WIDGET (self->artwork_box))
gtk_box_remove (self->artwork_box, child);
else
g_warning ("%p is not a child of %p", child, self);
}

View file

@ -21,12 +21,12 @@
#pragma once
#include <handy.h>
#include <adwaita.h>
G_BEGIN_DECLS
#define CC_TYPE_MULTITASKING_ROW (cc_multitasking_row_get_type())
G_DECLARE_FINAL_TYPE (CcMultitaskingRow, cc_multitasking_row, CC, MULTITASKING_ROW, HdyPreferencesRow)
G_DECLARE_FINAL_TYPE (CcMultitaskingRow, cc_multitasking_row, CC, MULTITASKING_ROW, AdwPreferencesRow)
const gchar *cc_multitasking_row_get_subtitle (CcMultitaskingRow *self);
void cc_multitasking_row_set_subtitle (CcMultitaskingRow *self,
@ -60,4 +60,7 @@ void cc_multitasking_row_add_artwork (CcMultitaskingRow *self,
void cc_multitasking_row_activate (CcMultitaskingRow *self);
void cc_multitasking_row_remove (CcMultitaskingRow *self,
GtkWidget *child);
G_END_DECLS

View file

@ -1,77 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="CcMultitaskingRow" parent="HdyPreferencesRow">
<template class="CcMultitaskingRow" parent="AdwPreferencesRow">
<property name="activatable">False</property>
<accessibility>
<relation target="title" type="labelled-by"/>
<relation name="labelled-by">title</relation>
</accessibility>
<child>
<object class="GtkBox" id="header">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="valign">center</property>
<property name="visible">True</property>
<style>
<class name="header"/>
</style>
<child>
<object class="GtkBox">
<property name="can_focus">False</property>
<property name="spacing">12</property>
<property name="valign">center</property>
<property name="vexpand">True</property>
<property name="visible">True</property>
<child>
<object class="GtkBox" id="prefixes">
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="spacing">12</property>
<property name="visible">False</property>
</object>
</child>
<child>
<object class="GtkImage" id="image">
<property name="no_show_all">True</property>
<property name="pixel_size">32</property>
<property name="valign">center</property>
<property name="visible">False</property>
</object>
</child>
<child>
<object class="GtkBox" id="title_box">
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="no_show_all">True</property>
<property name="orientation">vertical</property>
<property name="valign">center</property>
<property name="visible">True</property>
<style>
<class name="title"/>
</style>
<child>
<object class="GtkLabel" id="title">
<property name="can_focus">False</property>
<property name="ellipsize">end</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="label" bind-source="CcMultitaskingRow" bind-property="title" bind-flags="sync-create"/>
<property name="lines">1</property>
<property name="visible">True</property>
<property name="wrap">True</property>
<property name="wrap-mode">word-char</property>
<property name="xalign">0</property>
<style>
<class name="title"/>
</style>
<accessibility>
<relation target="CcMultitaskingRow" type="label-for"/>
</accessibility>
</object>
</child>
<child>
<object class="GtkLabel" id="subtitle">
<property name="can_focus">False</property>
<property name="ellipsize">end</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
@ -88,14 +73,9 @@
</child>
<child>
<object class="GtkBox" id="suffixes">
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="spacing">12</property>
<property name="visible">False</property>
</object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
@ -103,8 +83,6 @@
<child>
<object class="GtkBox" id="artwork_box">
<property name="can_focus">False</property>
<property name="no_show_all">True</property>
<property name="visible">False</property>
<property name="hexpand">True</property>
<property name="margin-top">12</property>

View file

@ -43,7 +43,7 @@ extern GType cc_default_apps_panel_get_type (void);
extern GType cc_info_overview_panel_get_type (void);
//extern GType cc_keyboard_panel_get_type (void);
//extern GType cc_mouse_panel_get_type (void);
//extern GType cc_multitasking_panel_get_type (void);
extern GType cc_multitasking_panel_get_type (void);
#ifdef BUILD_NETWORK
//extern GType cc_network_panel_get_type (void);
//extern GType cc_wifi_panel_get_type (void);
@ -114,7 +114,7 @@ static CcPanelLoaderVtable default_panels[] =
PANEL_TYPE("lock", cc_lock_panel_get_type, NULL),
PANEL_TYPE("microphone", cc_microphone_panel_get_type, NULL),
//PANEL_TYPE("mouse", cc_mouse_panel_get_type, NULL),
//PANEL_TYPE("multitasking", cc_multitasking_panel_get_type, NULL),
PANEL_TYPE("multitasking", cc_multitasking_panel_get_type, NULL),
#ifdef BUILD_NETWORK
//PANEL_TYPE("network", cc_network_panel_get_type, NULL),
//PANEL_TYPE("wifi", cc_wifi_panel_get_type, cc_wifi_panel_static_init_func),