Add libgnome-control-center with two new classes: CcShell and CcPanel
CcShell is an abstract class that represents an instance of a control center shell. It provides access to some of the properties of the shell that panels will need to read or change. When a panel is created it has an instance of CcShell available that represents the current shell. CcPanel is an abstract class used to implement panels for the shell. A panel contains a collection of related settings that are displayed within the shell window.
This commit is contained in:
parent
eb0e3e7785
commit
b4fdb6db4f
15 changed files with 965 additions and 3 deletions
|
@ -1,4 +1,5 @@
|
|||
SUBDIRS = po libwindow-settings capplets font-viewer help
|
||||
SUBDIRS = po libwindow-settings libgnome-control-center capplets font-viewer \
|
||||
help docs
|
||||
DIST_SUBDIRS = po libwindow-settings capplets font-viewer help libslab shell typing-break
|
||||
|
||||
if HAVE_LIBSLAB_DEPS
|
||||
|
@ -50,7 +51,7 @@ EXTRA_DIST = \
|
|||
MAINTAINERS \
|
||||
gnome-doc-utils.make
|
||||
|
||||
DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --disable-update-mimedb
|
||||
DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --disable-update-mimedb --enable-gtk-doc
|
||||
|
||||
GITIGNOREFILES=m4
|
||||
|
||||
|
|
|
@ -24,4 +24,6 @@ if ! which gnome-autogen.sh ; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
gtkdocize || exit 1
|
||||
|
||||
REQUIRED_AUTOMAKE_VERSION=1.9 . gnome-autogen.sh
|
||||
|
|
15
configure.ac
15
configure.ac
|
@ -1,4 +1,5 @@
|
|||
AC_INIT([gnome-control-center], [2.31.1],
|
||||
m4_define([gnome_control_center_version], 2.31.1)
|
||||
AC_INIT([gnome-control-center], [gnome_control_center_version],
|
||||
[http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-control-center])
|
||||
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
@ -314,6 +315,12 @@ AC_ARG_ENABLE(update-mimedb,
|
|||
enable_update_mimedb=yes)
|
||||
AM_CONDITIONAL(ENABLE_UPDATE_MIMEDB, test x$enable_update_mimedb = xyes)
|
||||
|
||||
# check for gtk-doc
|
||||
GTK_DOC_CHECK([1.9])
|
||||
|
||||
CONTROL_CENTER_VERSION=gnome_control_center_version
|
||||
AC_SUBST(CONTROL_CENTER_VERSION)
|
||||
|
||||
|
||||
AC_CONFIG_FILES([
|
||||
Makefile
|
||||
|
@ -347,9 +354,15 @@ capplets/network/Makefile
|
|||
capplets/network/gnome-network-properties.desktop.in
|
||||
capplets/windows/Makefile
|
||||
capplets/windows/window-properties.desktop.in
|
||||
docs/Makefile
|
||||
docs/reference/Makefile
|
||||
docs/reference/libgnome-control-center/Makefile
|
||||
docs/reference/libgnome-control-center/version.xml
|
||||
font-viewer/Makefile
|
||||
font-viewer/gnome-font-viewer.desktop.in
|
||||
help/Makefile
|
||||
libgnome-control-center/Makefile
|
||||
libgnome-control-center/libgnome-control-center.pc
|
||||
libwindow-settings/Makefile
|
||||
libwindow-settings/gnome-window-settings-2.0.pc
|
||||
po/Makefile.in
|
||||
|
|
3
docs/Makefile.am
Normal file
3
docs/Makefile.am
Normal file
|
@ -0,0 +1,3 @@
|
|||
SUBDIRS=reference
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
3
docs/reference/Makefile.am
Normal file
3
docs/reference/Makefile.am
Normal file
|
@ -0,0 +1,3 @@
|
|||
SUBDIRS=libgnome-control-center
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
102
docs/reference/libgnome-control-center/Makefile.am
Normal file
102
docs/reference/libgnome-control-center/Makefile.am
Normal file
|
@ -0,0 +1,102 @@
|
|||
## Process this file with automake to produce Makefile.in
|
||||
|
||||
# We require automake 1.6 at least.
|
||||
AUTOMAKE_OPTIONS = 1.6
|
||||
|
||||
# This is a blank Makefile.am for using gtk-doc.
|
||||
# Copy this to your project's API docs directory and modify the variables to
|
||||
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
|
||||
# of using the various options.
|
||||
|
||||
# The name of the module, e.g. 'glib'.
|
||||
DOC_MODULE=libgnome-control-center
|
||||
|
||||
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
|
||||
#DOC_MODULE_VERSION=2
|
||||
|
||||
|
||||
# The top-level SGML file. You can change this if you want to.
|
||||
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
|
||||
|
||||
# Directories containing the source code, relative to $(srcdir).
|
||||
# gtk-doc will search all .c and .h files beneath these paths
|
||||
# for inline comments documenting functions and macros.
|
||||
# e.g. DOC_SOURCE_DIR=../../../gtk ../../../gdk
|
||||
DOC_SOURCE_DIR=../../../libgnome-control-center
|
||||
|
||||
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
|
||||
SCANGOBJ_OPTIONS=
|
||||
|
||||
# Extra options to supply to gtkdoc-scan.
|
||||
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
|
||||
SCAN_OPTIONS=
|
||||
|
||||
# Extra options to supply to gtkdoc-mkdb.
|
||||
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
|
||||
MKDB_OPTIONS=--sgml-mode --output-format=xml
|
||||
|
||||
# Extra options to supply to gtkdoc-mktmpl
|
||||
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
|
||||
MKTMPL_OPTIONS=
|
||||
|
||||
# Extra options to supply to gtkdoc-mkhtml
|
||||
MKHTML_OPTIONS=
|
||||
|
||||
# Extra options to supply to gtkdoc-fixref. Not normally needed.
|
||||
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
|
||||
FIXXREF_OPTIONS=
|
||||
|
||||
# Used for dependencies. The docs will be rebuilt if any of these change.
|
||||
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
|
||||
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
|
||||
HFILE_GLOB=$(top_srcdir)/libgnome-control-center/*.h
|
||||
CFILE_GLOB=$(top_srcdir)/libgnome-control-center/*.c
|
||||
|
||||
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
|
||||
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
|
||||
EXTRA_HFILES=
|
||||
|
||||
# Header files to ignore when scanning. Use base file name, no paths
|
||||
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
|
||||
IGNORE_HFILES=
|
||||
|
||||
# Images to copy into HTML directory.
|
||||
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
|
||||
HTML_IMAGES=
|
||||
|
||||
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
|
||||
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
|
||||
content_files=
|
||||
|
||||
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
|
||||
# These files must be listed here *and* in content_files
|
||||
# e.g. expand_content_files=running.sgml
|
||||
expand_content_files=
|
||||
|
||||
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
|
||||
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
|
||||
# signals and properties.
|
||||
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
|
||||
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
|
||||
GTKDOC_CFLAGS=$(CAPPLET_CFLAGS)
|
||||
GTKDOC_LIBS=$(CAPPLET_LIBS) $(top_builddir)/libgnome-control-center/libgnome-control-center.la
|
||||
|
||||
# This includes the standard gtk-doc make rules, copied by gtkdocize.
|
||||
include $(top_srcdir)/gtk-doc.make
|
||||
|
||||
# Other files to distribute
|
||||
# e.g. EXTRA_DIST += version.xml.in
|
||||
EXTRA_DIST += version.xml.in
|
||||
|
||||
# Files not to distribute
|
||||
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
|
||||
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
|
||||
#DISTCLEANFILES +=
|
||||
|
||||
# Comment this out if you want your docs-status tested during 'make check'
|
||||
if ENABLE_GTK_DOC
|
||||
#TESTS_ENVIRONMENT = cd $(srcsrc) &&
|
||||
#TESTS = $(GTKDOC_CHECK)
|
||||
endif
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
|
||||
[
|
||||
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
|
||||
<!ENTITY version SYSTEM "version.xml">
|
||||
]>
|
||||
<book id="index">
|
||||
<bookinfo>
|
||||
<title>libgnome-control-center Reference Manual</title>
|
||||
<releaseinfo>
|
||||
for libgnome-control-center &version;.
|
||||
<!--
|
||||
The latest version of this documentation can be found on-line at
|
||||
<ulink role="online-location" url="http://[SERVER]/libgnome-control-center/index.html">http://[SERVER]/libgnome-control-center/</ulink>.
|
||||
-->
|
||||
</releaseinfo>
|
||||
</bookinfo>
|
||||
|
||||
<chapter>
|
||||
<title>libgnome-control-center</title>
|
||||
<xi:include href="xml/cc-shell.xml"/>
|
||||
<xi:include href="xml/cc-panel.xml"/>
|
||||
</chapter>
|
||||
<chapter id="object-tree">
|
||||
<title>Object Hierarchy</title>
|
||||
<xi:include href="xml/tree_index.sgml"/>
|
||||
</chapter>
|
||||
<index id="api-index-full">
|
||||
<title>API Index</title>
|
||||
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
|
||||
</index>
|
||||
|
||||
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
|
||||
</book>
|
|
@ -0,0 +1,43 @@
|
|||
<SECTION>
|
||||
<FILE>cc-shell</FILE>
|
||||
<TITLE>CcShell</TITLE>
|
||||
CcShell
|
||||
CcShellClass
|
||||
cc_shell_get_active_panel
|
||||
cc_shell_set_active_panel
|
||||
cc_shell_set_active_panel_from_id
|
||||
<SUBSECTION Standard>
|
||||
CC_SHELL
|
||||
CC_IS_SHELL
|
||||
CC_TYPE_SHELL
|
||||
cc_shell_get_type
|
||||
CC_SHELL_CLASS
|
||||
CC_IS_SHELL_CLASS
|
||||
CC_SHELL_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
CcShellPrivate
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>cc-panel</FILE>
|
||||
<TITLE>CcPanel</TITLE>
|
||||
CcPanel
|
||||
CcPanelClass
|
||||
cc_panel_get_id
|
||||
cc_panel_get_shell
|
||||
cc_panel_get_display_name
|
||||
cc_panel_set_display_name
|
||||
cc_panel_get_active
|
||||
cc_panel_set_active
|
||||
<SUBSECTION Standard>
|
||||
CC_PANEL
|
||||
CC_IS_PANEL
|
||||
CC_TYPE_PANEL
|
||||
cc_panel_get_type
|
||||
CC_PANEL_CLASS
|
||||
CC_IS_PANEL_CLASS
|
||||
CC_PANEL_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
CcPanelPrivate
|
||||
</SECTION>
|
||||
|
1
docs/reference/libgnome-control-center/version.xml.in
Normal file
1
docs/reference/libgnome-control-center/version.xml.in
Normal file
|
@ -0,0 +1 @@
|
|||
@CONTROL_CENTER_VERSION@
|
47
libgnome-control-center/Makefile.am
Normal file
47
libgnome-control-center/Makefile.am
Normal file
|
@ -0,0 +1,47 @@
|
|||
NULL =
|
||||
|
||||
uidir = $(pkgdatadir)/ui
|
||||
|
||||
INCLUDES = \
|
||||
$(CAPPLET_CFLAGS) \
|
||||
$(NULL)
|
||||
|
||||
lib_LTLIBRARIES = libgnome-control-center.la
|
||||
|
||||
libgnome_control_center_include_HEADERS = \
|
||||
cc-panel.h \
|
||||
cc-shell.h \
|
||||
$(NULL)
|
||||
|
||||
libgnome_control_center_la_SOURCES = \
|
||||
cc-panel.c \
|
||||
cc-panel.h \
|
||||
cc-shell.c \
|
||||
cc-shell.h \
|
||||
$(NULL)
|
||||
|
||||
libgnome_control_center_la_LDFLAGS = \
|
||||
no-undefined \
|
||||
$(NULL)
|
||||
|
||||
libgnome_control_center_la_LIBADD = \
|
||||
$(CAPPLET_LIBS) \
|
||||
$(NULL)
|
||||
|
||||
libgnome_control_center_la_LIBTOOLFLAGS = --tag=disable-static
|
||||
|
||||
libgnome_control_center_includedir = $(includedir)/gnome-control-center-1/libgnome-control-center
|
||||
|
||||
pkgconfigdir=$(libdir)/pkgconfig
|
||||
pkgconfig_DATA=libgnome-control-center.pc
|
||||
|
||||
EXTRA_DIST = \
|
||||
libgnome-control-center.pc.in \
|
||||
$(NULL)
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DGNOMELOCALEDIR="\"$(datadir)/locale\"" \
|
||||
-DUIDIR="\"$(uidir)\"" \
|
||||
-DMENUDIR="\"$(menudir)\""
|
||||
|
||||
-include $(top_srcdir)/git.mk
|
303
libgnome-control-center/cc-panel.c
Normal file
303
libgnome-control-center/cc-panel.c
Normal file
|
@ -0,0 +1,303 @@
|
|||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||
*
|
||||
* Copyright (C) 2010 Red Hat, Inc.
|
||||
* Copyright (C) 2010 Intel, Inc
|
||||
*
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: William Jon McCann <jmccann@redhat.com>
|
||||
* Thomas Wood <thomas.wood@intel.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:cc-panel
|
||||
* @short_description: An abstract class for Control Center panels
|
||||
*
|
||||
* CcPanel is an abstract class used to implement panels for the shell. A
|
||||
* panel contains a collection of related settings that are displayed within
|
||||
* the shell window.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "cc-panel.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <gio/gio.h>
|
||||
|
||||
#define CC_PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_PANEL, CcPanelPrivate))
|
||||
|
||||
struct CcPanelPrivate
|
||||
{
|
||||
gchar *id;
|
||||
gchar *display_name;
|
||||
gchar *category;
|
||||
gchar *current_location;
|
||||
|
||||
gboolean is_active;
|
||||
CcShell *shell;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_ID = 1,
|
||||
PROP_DISPLAY_NAME,
|
||||
PROP_SHELL,
|
||||
PROP_ACTIVE
|
||||
};
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (CcPanel, cc_panel, GTK_TYPE_ALIGNMENT)
|
||||
|
||||
static void
|
||||
cc_panel_set_property (GObject *object,
|
||||
guint prop_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
CcPanel *panel;
|
||||
|
||||
panel = CC_PANEL (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_ID:
|
||||
/* construct only property */
|
||||
g_free (panel->priv->id);
|
||||
panel->priv->id = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_DISPLAY_NAME:
|
||||
cc_panel_set_display_name (panel, g_value_get_string (value));
|
||||
break;
|
||||
|
||||
case PROP_SHELL:
|
||||
/* construct only property */
|
||||
panel->priv->shell = g_value_get_object (value);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cc_panel_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
CcPanel *panel;
|
||||
|
||||
panel = CC_PANEL (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_ID:
|
||||
g_value_set_string (value, panel->priv->id);
|
||||
break;
|
||||
|
||||
case PROP_DISPLAY_NAME:
|
||||
g_value_set_string (value, panel->priv->display_name);
|
||||
break;
|
||||
|
||||
case PROP_SHELL:
|
||||
g_value_set_object (value, panel->priv->shell);
|
||||
break;
|
||||
|
||||
case PROP_ACTIVE:
|
||||
g_value_set_boolean (value, panel->priv->is_active);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cc_panel_finalize (GObject *object)
|
||||
{
|
||||
CcPanel *panel;
|
||||
|
||||
g_return_if_fail (object != NULL);
|
||||
g_return_if_fail (CC_IS_PANEL (object));
|
||||
|
||||
panel = CC_PANEL (object);
|
||||
|
||||
g_free (panel->priv->id);
|
||||
g_free (panel->priv->display_name);
|
||||
|
||||
G_OBJECT_CLASS (cc_panel_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
cc_panel_class_init (CcPanelClass *klass)
|
||||
{
|
||||
GParamSpec *pspec;
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->get_property = cc_panel_get_property;
|
||||
object_class->set_property = cc_panel_set_property;
|
||||
object_class->finalize = cc_panel_finalize;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (CcPanelPrivate));
|
||||
|
||||
pspec = g_param_spec_string ("id",
|
||||
"id",
|
||||
"Unique id of the Panel",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
|
||||
g_object_class_install_property (object_class, PROP_ID, pspec );
|
||||
|
||||
pspec = g_param_spec_string ("display-name",
|
||||
"display name",
|
||||
"Display name of the Panel",
|
||||
NULL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
g_object_class_install_property (object_class, PROP_DISPLAY_NAME, pspec);
|
||||
|
||||
pspec = g_param_spec_object ("shell",
|
||||
"Shell",
|
||||
"Shell the Panel resides in",
|
||||
CC_TYPE_SHELL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS
|
||||
| G_PARAM_CONSTRUCT_ONLY);
|
||||
g_object_class_install_property (object_class, PROP_SHELL, pspec);
|
||||
|
||||
pspec = g_param_spec_boolean ("active",
|
||||
"Active",
|
||||
"Whether the panel is currently the active"
|
||||
" panel of the shell",
|
||||
FALSE,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
g_object_class_install_property (object_class, PROP_ACTIVE, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_panel_init (CcPanel *panel)
|
||||
{
|
||||
panel->priv = CC_PANEL_GET_PRIVATE (panel);
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_panel_get_shell:
|
||||
* @panel: A #CcPanel
|
||||
*
|
||||
* Get the shell that the panel resides in
|
||||
*
|
||||
* Returns: a #CcShell
|
||||
*/
|
||||
CcShell *
|
||||
cc_panel_get_shell (CcPanel *panel)
|
||||
{
|
||||
return panel->priv->shell;
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_panel_get_id:
|
||||
* @panel: A #CcPanel
|
||||
*
|
||||
* Get the value of the #CcPanel:id property
|
||||
*
|
||||
* Returns: value of the id property, owned by the panel
|
||||
*/
|
||||
const gchar*
|
||||
cc_panel_get_id (CcPanel *panel)
|
||||
{
|
||||
g_return_val_if_fail (CC_IS_PANEL (panel), NULL);
|
||||
|
||||
return panel->priv->id;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* cc_panel_get_active:
|
||||
* @panel: A #CcPanel
|
||||
*
|
||||
* Get the current value of the #CcPanel:active property
|
||||
*
|
||||
* Returns: #TRUE if the panel is marked as active
|
||||
*/
|
||||
gboolean
|
||||
cc_panel_get_active (CcPanel *panel)
|
||||
{
|
||||
g_return_val_if_fail (CC_IS_PANEL (panel), FALSE);
|
||||
|
||||
return panel->priv->is_active;
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_panel_set_active:
|
||||
* @panel: A #CcPanel
|
||||
* @is_active: #TRUE if the panel is now active
|
||||
*
|
||||
* Mark the panel as active. This should only be called by CcShell
|
||||
* implementations.
|
||||
*
|
||||
*/
|
||||
void
|
||||
cc_panel_set_active (CcPanel *panel,
|
||||
gboolean is_active)
|
||||
{
|
||||
g_return_if_fail (CC_IS_PANEL (panel));
|
||||
|
||||
if (panel->priv->is_active != is_active)
|
||||
{
|
||||
gtk_widget_queue_resize (GTK_WIDGET (panel));
|
||||
|
||||
g_object_notify (G_OBJECT (panel), "active");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_panel_set_display_name:
|
||||
* @panel: A #CcPanel
|
||||
* @display_name: Display name of the panel
|
||||
*
|
||||
* Set the value of the #CcPanel:display-name property.
|
||||
*
|
||||
*/
|
||||
void
|
||||
cc_panel_set_display_name (CcPanel *panel,
|
||||
const gchar *display_name)
|
||||
{
|
||||
g_return_if_fail (CC_IS_PANEL (panel));
|
||||
g_return_if_fail (display_name != NULL);
|
||||
|
||||
g_free (panel->priv->display_name);
|
||||
panel->priv->display_name = g_strdup (display_name);
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_panel_get_display_name:
|
||||
* @panel: A #CcPanel
|
||||
*
|
||||
* Get the value of the #CcPanel:display-name property.
|
||||
*
|
||||
* Returns: the display name, owned by the panel
|
||||
*/
|
||||
const gchar*
|
||||
cc_panel_get_display_name (CcPanel *panel)
|
||||
{
|
||||
g_return_val_if_fail (CC_IS_PANEL (panel), NULL);
|
||||
|
||||
return panel->priv->display_name;
|
||||
}
|
86
libgnome-control-center/cc-panel.h
Normal file
86
libgnome-control-center/cc-panel.h
Normal file
|
@ -0,0 +1,86 @@
|
|||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||
*
|
||||
* Copyright (C) 2010 Red Hat, Inc.
|
||||
* Copyright (C) 2010 Intel, Inc
|
||||
*
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: William Jon McCann <jmccann@redhat.com>
|
||||
* Thomas Wood <thomas.wood@intel.com>
|
||||
*/
|
||||
|
||||
|
||||
#ifndef __CC_PANEL_H
|
||||
#define __CC_PANEL_H
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define CC_TYPE_PANEL (cc_panel_get_type ())
|
||||
#define CC_PANEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CC_TYPE_PANEL, CcPanel))
|
||||
#define CC_PANEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CC_TYPE_PANEL, CcPanelClass))
|
||||
#define CC_IS_PANEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CC_TYPE_PANEL))
|
||||
#define CC_IS_PANEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CC_TYPE_PANEL))
|
||||
#define CC_PANEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CC_TYPE_PANEL, CcPanelClass))
|
||||
|
||||
typedef struct CcPanelPrivate CcPanelPrivate;
|
||||
|
||||
typedef struct _CcPanel CcPanel;
|
||||
typedef struct _CcPanelClass CcPanelClass;
|
||||
|
||||
/* cc-shell.h requires CcPanel, so make sure it is defined first */
|
||||
#include "cc-shell.h"
|
||||
|
||||
/**
|
||||
* CcPanel:
|
||||
*
|
||||
* The contents of this struct are private should not be accessed directly.
|
||||
*/
|
||||
struct _CcPanel
|
||||
{
|
||||
/*< private >*/
|
||||
GtkAlignment parent;
|
||||
CcPanelPrivate *priv;
|
||||
};
|
||||
/**
|
||||
* CcPanelClass:
|
||||
*
|
||||
* The contents of this struct are private should not be accessed directly.
|
||||
*/
|
||||
struct _CcPanelClass
|
||||
{
|
||||
/*< private >*/
|
||||
GtkAlignmentClass parent_class;
|
||||
};
|
||||
|
||||
GType cc_panel_get_type (void);
|
||||
|
||||
const gchar* cc_panel_get_id (CcPanel *panel);
|
||||
CcShell* cc_panel_get_shell (CcPanel *panel);
|
||||
|
||||
const gchar* cc_panel_get_display_name (CcPanel *panel);
|
||||
void cc_panel_set_display_name (CcPanel *panel,
|
||||
const gchar *display_name);
|
||||
gboolean cc_panel_get_active (CcPanel *panel);
|
||||
void cc_panel_set_active (CcPanel *panel,
|
||||
gboolean is_active);
|
||||
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __CC_PANEL_H */
|
211
libgnome-control-center/cc-shell.c
Normal file
211
libgnome-control-center/cc-shell.c
Normal file
|
@ -0,0 +1,211 @@
|
|||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||
*
|
||||
* Copyright (c) 2010 Intel, Inc.
|
||||
*
|
||||
* The Control Center 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.
|
||||
*
|
||||
* The Control Center 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 the Control Center; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Author: Thomas Wood <thos@gnome.org>
|
||||
*/
|
||||
|
||||
/**
|
||||
* SECTION:cc-shell
|
||||
* @short_description: Abstract class representing the Control Center shell
|
||||
*
|
||||
* CcShell is an abstract class that represents an instance of a control
|
||||
* center shell. It provides access to some of the properties of the shell
|
||||
* that panels will need to read or change. When a panel is created it has an
|
||||
* instance of CcShell available that represents the current shell.
|
||||
*/
|
||||
|
||||
|
||||
#include "cc-shell.h"
|
||||
#include "cc-panel.h"
|
||||
|
||||
G_DEFINE_ABSTRACT_TYPE (CcShell, cc_shell, G_TYPE_OBJECT)
|
||||
|
||||
#define SHELL_PRIVATE(o) \
|
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), CC_TYPE_SHELL, CcShellPrivate))
|
||||
|
||||
struct _CcShellPrivate
|
||||
{
|
||||
CcPanel *active_panel;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
PROP_ACTIVE_PANEL = 1
|
||||
};
|
||||
|
||||
|
||||
static void
|
||||
cc_shell_get_property (GObject *object,
|
||||
guint property_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
CcShell *shell = CC_SHELL (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_ACTIVE_PANEL:
|
||||
g_value_set_object (value, shell->priv->active_panel);
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cc_shell_set_property (GObject *object,
|
||||
guint property_id,
|
||||
const GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
CcShell *shell = CC_SHELL (object);
|
||||
|
||||
switch (property_id)
|
||||
{
|
||||
case PROP_ACTIVE_PANEL:
|
||||
cc_shell_set_active_panel (shell, g_value_get_object (value));
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
cc_shell_dispose (GObject *object)
|
||||
{
|
||||
/* remove and unref the active shell */
|
||||
cc_shell_set_active_panel (CC_SHELL (object), NULL);
|
||||
|
||||
G_OBJECT_CLASS (cc_shell_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_shell_class_init (CcShellClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GParamSpec *pspec;
|
||||
|
||||
g_type_class_add_private (klass, sizeof (CcShellPrivate));
|
||||
|
||||
object_class->get_property = cc_shell_get_property;
|
||||
object_class->set_property = cc_shell_set_property;
|
||||
object_class->dispose = cc_shell_dispose;
|
||||
|
||||
pspec = g_param_spec_object ("active-panel",
|
||||
"active panel",
|
||||
"The currently active Panel",
|
||||
CC_TYPE_PANEL,
|
||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
|
||||
g_object_class_install_property (object_class, PROP_ACTIVE_PANEL, pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
cc_shell_init (CcShell *self)
|
||||
{
|
||||
self->priv = SHELL_PRIVATE (self);
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_shell_get_active_panel:
|
||||
* @shell: A #CcShell
|
||||
*
|
||||
* Get the current active panel
|
||||
*
|
||||
* Returns: a #CcPanel or NULL if no panel is active
|
||||
*/
|
||||
CcPanel*
|
||||
cc_shell_get_active_panel (CcShell *shell)
|
||||
{
|
||||
g_return_val_if_fail (CC_IS_SHELL (shell), NULL);
|
||||
|
||||
return shell->priv->active_panel;
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_shell_set_active_panel:
|
||||
* @shell: A #CcShell
|
||||
* @panel: A #CcPanel
|
||||
*
|
||||
* Set the current active panel. If @panel is NULL, then the shell is returned
|
||||
* to a state where no panel is being displayed (for example, the list of panels
|
||||
* may be shown instead).
|
||||
*
|
||||
*/
|
||||
void
|
||||
cc_shell_set_active_panel (CcShell *shell,
|
||||
CcPanel *panel)
|
||||
{
|
||||
g_return_if_fail (CC_IS_SHELL (shell));
|
||||
g_return_if_fail (panel == NULL || CC_IS_PANEL (panel));
|
||||
|
||||
if (panel != shell->priv->active_panel)
|
||||
{
|
||||
/* remove the old panel */
|
||||
cc_panel_set_active (shell->priv->active_panel, FALSE);
|
||||
g_object_unref (shell->priv->active_panel);
|
||||
shell->priv->active_panel = NULL;
|
||||
|
||||
/* set the new panel */
|
||||
if (panel)
|
||||
{
|
||||
cc_panel_set_active (shell->priv->active_panel, TRUE);
|
||||
shell->priv->active_panel = g_object_ref (panel);
|
||||
}
|
||||
|
||||
g_object_notify (G_OBJECT (shell), "active-panel");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* cc_shell_set_active_panel_from_id:
|
||||
* @shell: A #CcShell
|
||||
* @id: the ID of the panel to set as active
|
||||
* @error: A #GError
|
||||
*
|
||||
* Find a panel corresponding to the specified id and set it as active.
|
||||
*
|
||||
* Returns: #TRUE if the panel was found and set as the active panel
|
||||
*/
|
||||
gboolean
|
||||
cc_shell_set_active_panel_from_id (CcShell *shell,
|
||||
const gchar *id,
|
||||
GError **error)
|
||||
{
|
||||
CcShellClass *class;
|
||||
|
||||
g_return_val_if_fail (CC_IS_SHELL (shell), FALSE);
|
||||
|
||||
|
||||
class = (CcShellClass *) G_OBJECT_GET_CLASS (shell);
|
||||
|
||||
if (!class->set_active_panel_from_id)
|
||||
{
|
||||
g_warning ("Object of type \"%s\" does not implement required virtual"
|
||||
" function \"set_active_panel_from_id\",",
|
||||
G_OBJECT_TYPE_NAME (shell));
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return class->set_active_panel_from_id (shell, id, error);
|
||||
}
|
||||
}
|
||||
|
||||
|
100
libgnome-control-center/cc-shell.h
Normal file
100
libgnome-control-center/cc-shell.h
Normal file
|
@ -0,0 +1,100 @@
|
|||
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
|
||||
*
|
||||
* Copyright (c) 2010 Intel, Inc.
|
||||
*
|
||||
* The Control Center 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.
|
||||
*
|
||||
* The Control Center 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 the Control Center; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Author: Thomas Wood <thos@gnome.org>
|
||||
*/
|
||||
|
||||
#ifndef _CC_SHELL_H
|
||||
#define _CC_SHELL_H
|
||||
|
||||
#include <glib-object.h>
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define CC_TYPE_SHELL cc_shell_get_type()
|
||||
|
||||
#define CC_SHELL(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
|
||||
CC_TYPE_SHELL, CcShell))
|
||||
|
||||
#define CC_SHELL_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_CAST ((klass), \
|
||||
CC_TYPE_SHELL, CcShellClass))
|
||||
|
||||
#define CC_IS_SHELL(obj) \
|
||||
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
|
||||
CC_TYPE_SHELL))
|
||||
|
||||
#define CC_IS_SHELL_CLASS(klass) \
|
||||
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
|
||||
CC_TYPE_SHELL))
|
||||
|
||||
#define CC_SHELL_GET_CLASS(obj) \
|
||||
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
|
||||
CC_TYPE_SHELL, CcShellClass))
|
||||
|
||||
typedef struct _CcShell CcShell;
|
||||
typedef struct _CcShellClass CcShellClass;
|
||||
typedef struct _CcShellPrivate CcShellPrivate;
|
||||
|
||||
/* cc-panel.h requires CcShell, so make sure they are defined first */
|
||||
#include "cc-panel.h"
|
||||
|
||||
/**
|
||||
* CcShell:
|
||||
*
|
||||
* The contents of this struct are private should not be accessed directly.
|
||||
*/
|
||||
struct _CcShell
|
||||
{
|
||||
/*< private >*/
|
||||
GObject parent;
|
||||
|
||||
CcShellPrivate *priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* CcShellClass:
|
||||
* @set_active_panel_from_id: virtual function to set the active panel from an
|
||||
* id string
|
||||
*
|
||||
*/
|
||||
struct _CcShellClass
|
||||
{
|
||||
/*< private >*/
|
||||
GObjectClass parent_class;
|
||||
|
||||
/*< public >*/
|
||||
/* vfuncs */
|
||||
gboolean (*set_active_panel_from_id) (CcShell *shell,
|
||||
const gchar *id,
|
||||
GError **error);
|
||||
};
|
||||
|
||||
GType cc_shell_get_type (void) G_GNUC_CONST;
|
||||
|
||||
CcPanel* cc_shell_get_active_panel (CcShell *shell);
|
||||
void cc_shell_set_active_panel (CcShell *shell,
|
||||
CcPanel *panel);
|
||||
gboolean cc_shell_set_active_panel_from_id (CcShell *shell,
|
||||
const gchar *id,
|
||||
GError **error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* _CC_SHELL_H */
|
12
libgnome-control-center/libgnome-control-center.pc.in
Normal file
12
libgnome-control-center/libgnome-control-center.pc.in
Normal file
|
@ -0,0 +1,12 @@
|
|||
prefix=@prefix@
|
||||
exec_prefix=@exec_prefix@
|
||||
libdir=@libdir@
|
||||
includedir=@includedir@
|
||||
extensiondir=@libdir@/control-center-1/panels
|
||||
|
||||
Name: libgnome-control-center
|
||||
Description: A library to create GNOME Control Center extensions
|
||||
Version: @VERSION@
|
||||
Requires: glib-2.0 gio-2.0 gtk+-2.0
|
||||
Libs: -L${libdir} -lgnome-control-center
|
||||
Cflags: -I${includedir}/gnome-control-center-1
|
Loading…
Add table
Add a link
Reference in a new issue