|
rpm-build |
f53ec4 |
/* dzl-preferences-page.c
|
|
rpm-build |
f53ec4 |
*
|
|
rpm-build |
f53ec4 |
* Copyright (C) 2015-2017 Christian Hergert <chergert@redhat.com>
|
|
rpm-build |
f53ec4 |
*
|
|
rpm-build |
f53ec4 |
* This program is free software: you can redistribute it and/or modify
|
|
rpm-build |
f53ec4 |
* it under the terms of the GNU General Public License as published by
|
|
rpm-build |
f53ec4 |
* the Free Software Foundation, either version 3 of the License, or
|
|
rpm-build |
f53ec4 |
* (at your option) any later version.
|
|
rpm-build |
f53ec4 |
*
|
|
rpm-build |
f53ec4 |
* This program is distributed in the hope that it will be useful,
|
|
rpm-build |
f53ec4 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
rpm-build |
f53ec4 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
rpm-build |
f53ec4 |
* GNU General Public License for more details.
|
|
rpm-build |
f53ec4 |
*
|
|
rpm-build |
f53ec4 |
* You should have received a copy of the GNU General Public License
|
|
rpm-build |
f53ec4 |
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
rpm-build |
f53ec4 |
*/
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
#include "config.h"
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
#include <glib/gi18n.h>
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
#include "prefs/dzl-preferences-group.h"
|
|
rpm-build |
f53ec4 |
#include "prefs/dzl-preferences-group-private.h"
|
|
rpm-build |
f53ec4 |
#include "prefs/dzl-preferences-page.h"
|
|
rpm-build |
f53ec4 |
#include "prefs/dzl-preferences-page-private.h"
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
enum {
|
|
rpm-build |
f53ec4 |
PROP_0,
|
|
rpm-build |
f53ec4 |
PROP_PRIORITY,
|
|
rpm-build |
f53ec4 |
LAST_PROP
|
|
rpm-build |
f53ec4 |
};
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
G_DEFINE_TYPE (DzlPreferencesPage, dzl_preferences_page, GTK_TYPE_BIN)
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static GParamSpec *properties [LAST_PROP];
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_finalize (GObject *object)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
DzlPreferencesPage *self = (DzlPreferencesPage *)object;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_clear_pointer (&self->groups_by_name, g_hash_table_unref);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
G_OBJECT_CLASS (dzl_preferences_page_parent_class)->finalize (object);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_get_property (GObject *object,
|
|
rpm-build |
f53ec4 |
guint prop_id,
|
|
rpm-build |
f53ec4 |
GValue *value,
|
|
rpm-build |
f53ec4 |
GParamSpec *pspec)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
DzlPreferencesPage *self = DZL_PREFERENCES_PAGE (object);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
switch (prop_id)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
case PROP_PRIORITY:
|
|
rpm-build |
f53ec4 |
g_value_set_int (value, self->priority);
|
|
rpm-build |
f53ec4 |
break;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
default:
|
|
rpm-build |
f53ec4 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_set_property (GObject *object,
|
|
rpm-build |
f53ec4 |
guint prop_id,
|
|
rpm-build |
f53ec4 |
const GValue *value,
|
|
rpm-build |
f53ec4 |
GParamSpec *pspec)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
DzlPreferencesPage *self = DZL_PREFERENCES_PAGE (object);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
switch (prop_id)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
case PROP_PRIORITY:
|
|
rpm-build |
f53ec4 |
self->priority = g_value_get_int (value);
|
|
rpm-build |
f53ec4 |
break;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
default:
|
|
rpm-build |
f53ec4 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_class_init (DzlPreferencesPageClass *klass)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
rpm-build |
f53ec4 |
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
object_class->finalize = dzl_preferences_page_finalize;
|
|
rpm-build |
f53ec4 |
object_class->get_property = dzl_preferences_page_get_property;
|
|
rpm-build |
f53ec4 |
object_class->set_property = dzl_preferences_page_set_property;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
properties [PROP_PRIORITY] =
|
|
rpm-build |
f53ec4 |
g_param_spec_int ("priority",
|
|
rpm-build |
f53ec4 |
"Priority",
|
|
rpm-build |
f53ec4 |
"Priority",
|
|
rpm-build |
f53ec4 |
G_MININT,
|
|
rpm-build |
f53ec4 |
G_MAXINT,
|
|
rpm-build |
f53ec4 |
0,
|
|
rpm-build |
f53ec4 |
(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_object_class_install_properties (object_class, LAST_PROP, properties);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/dazzle/ui/dzl-preferences-page.ui");
|
|
rpm-build |
f53ec4 |
gtk_widget_class_bind_template_child (widget_class, DzlPreferencesPage, box);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
static void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_init (DzlPreferencesPage *self)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
self->groups_by_name = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
gtk_widget_init_template (GTK_WIDGET (self));
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_add_group (DzlPreferencesPage *self,
|
|
rpm-build |
f53ec4 |
DzlPreferencesGroup *group)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
gchar *name = NULL;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
|
|
rpm-build |
f53ec4 |
g_return_if_fail (DZL_IS_PREFERENCES_GROUP (group));
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_object_get (group, "name", &name, NULL);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
if (g_hash_table_contains (self->groups_by_name, name))
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
g_free (name);
|
|
rpm-build |
f53ec4 |
return;
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_hash_table_insert (self->groups_by_name, name, group);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
gtk_container_add_with_properties (GTK_CONTAINER (self->box), GTK_WIDGET (group),
|
|
rpm-build |
f53ec4 |
"priority", dzl_preferences_group_get_priority (group),
|
|
rpm-build |
f53ec4 |
NULL);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
/**
|
|
rpm-build |
f53ec4 |
* dzl_preferences_page_get_group:
|
|
rpm-build |
f53ec4 |
*
|
|
rpm-build |
f53ec4 |
* Returns: (transfer none) (nullable): An #DzlPreferencesGroup or %NULL.
|
|
rpm-build |
f53ec4 |
*/
|
|
rpm-build |
f53ec4 |
DzlPreferencesGroup *
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_get_group (DzlPreferencesPage *self,
|
|
rpm-build |
f53ec4 |
const gchar *name)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
g_return_val_if_fail (DZL_IS_PREFERENCES_PAGE (self), NULL);
|
|
rpm-build |
f53ec4 |
g_return_val_if_fail (name != NULL, NULL);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
return g_hash_table_lookup (self->groups_by_name, name);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_set_map (DzlPreferencesPage *self,
|
|
rpm-build |
f53ec4 |
GHashTable *map)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
DzlPreferencesGroup *group;
|
|
rpm-build |
f53ec4 |
GHashTableIter iter;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_hash_table_iter_init (&iter, self->groups_by_name);
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&group))
|
|
rpm-build |
f53ec4 |
dzl_preferences_group_set_map (group, map);
|
|
rpm-build |
f53ec4 |
}
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
void
|
|
rpm-build |
f53ec4 |
dzl_preferences_page_refilter (DzlPreferencesPage *self,
|
|
rpm-build |
f53ec4 |
DzlPatternSpec *spec)
|
|
rpm-build |
f53ec4 |
{
|
|
rpm-build |
f53ec4 |
DzlPreferencesGroup *group;
|
|
rpm-build |
f53ec4 |
GHashTableIter iter;
|
|
rpm-build |
f53ec4 |
guint count = 0;
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_return_if_fail (DZL_IS_PREFERENCES_PAGE (self));
|
|
rpm-build |
f53ec4 |
|
|
rpm-build |
f53ec4 |
g_hash_table_iter_init (&iter, self->groups_by_name);
|
|
rpm-build |
f53ec4 |
while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&group))
|
|
rpm-build |
f53ec4 |
count += dzl_preferences_group_refilter (group, spec);
|
|
rpm-build |
f53ec4 |
gtk_widget_set_visible (GTK_WIDGET (self), count > 0);
|
|
rpm-build |
f53ec4 |
}
|