This has the side effect of showing UI elements that should not be visible at startup. Just add the correct gtk_widget_show calls to show all relevant widgets.
205 lines
5.6 KiB
C
205 lines
5.6 KiB
C
/*
|
|
* Copyright (c) 2009, 2010 Intel, Inc.
|
|
* Copyright (c) 2010, 2018 Red Hat, Inc.
|
|
* Copyright (c) 2016 Endless, 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: Benjamin Berg <bberg@redhat.com>
|
|
*/
|
|
|
|
#define G_LOG_DOMAIN "cc-test-window"
|
|
|
|
#include <config.h>
|
|
|
|
#include "cc-test-window.h"
|
|
|
|
#include <gio/gio.h>
|
|
#include <gtk/gtk.h>
|
|
#include <gdk/gdkkeysyms.h>
|
|
#include <gdk/gdkx.h>
|
|
#include <string.h>
|
|
|
|
#include "shell/cc-panel.h"
|
|
#include "shell/cc-shell.h"
|
|
#include "cc-util.h"
|
|
|
|
|
|
struct _CcTestWindow
|
|
{
|
|
GtkWindow parent;
|
|
|
|
GtkWidget *main_box;
|
|
|
|
GtkWidget *header;
|
|
CcPanel *active_panel;
|
|
};
|
|
|
|
static void cc_shell_iface_init (CcShellInterface *iface);
|
|
|
|
G_DEFINE_TYPE_WITH_CODE (CcTestWindow, cc_test_window, GTK_TYPE_WINDOW,
|
|
G_IMPLEMENT_INTERFACE (CC_TYPE_SHELL, cc_shell_iface_init))
|
|
|
|
enum
|
|
{
|
|
PROP_0,
|
|
PROP_ACTIVE_PANEL
|
|
};
|
|
|
|
|
|
|
|
static void
|
|
set_active_panel (CcTestWindow *shell,
|
|
CcPanel *panel)
|
|
{
|
|
g_assert (CC_IS_SHELL (shell));
|
|
g_assert (CC_IS_PANEL (panel));
|
|
|
|
/* Only allow setting to a non NULL value once. */
|
|
g_assert (shell->active_panel == NULL);
|
|
|
|
if (panel)
|
|
{
|
|
shell->active_panel = g_object_ref (panel);
|
|
gtk_container_add_with_properties (GTK_CONTAINER (shell->main_box), GTK_WIDGET (panel),
|
|
"pack-type", GTK_PACK_END,
|
|
"expand", TRUE,
|
|
"fill", TRUE,
|
|
NULL);
|
|
gtk_widget_show (GTK_WIDGET (shell->active_panel));
|
|
}
|
|
}
|
|
|
|
/* CcShell implementation */
|
|
static gboolean
|
|
cc_test_window_set_active_panel_from_id (CcShell *shell,
|
|
const gchar *start_id,
|
|
GVariant *parameters,
|
|
GError **error)
|
|
{
|
|
/* Not implemented */
|
|
g_assert_not_reached ();
|
|
}
|
|
|
|
static void
|
|
cc_test_window_embed_widget_in_header (CcShell *shell,
|
|
GtkWidget *widget)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (shell);
|
|
|
|
/* add to main box */
|
|
gtk_container_add_with_properties (GTK_CONTAINER (self->main_box), GTK_WIDGET (widget),
|
|
"pack-type", GTK_PACK_START,
|
|
"expand", FALSE,
|
|
"fill", TRUE,
|
|
NULL);
|
|
gtk_widget_show (widget);
|
|
}
|
|
|
|
static GtkWidget *
|
|
cc_test_window_get_toplevel (CcShell *shell)
|
|
{
|
|
return GTK_WIDGET (shell);
|
|
}
|
|
|
|
static void
|
|
cc_shell_iface_init (CcShellInterface *iface)
|
|
{
|
|
iface->set_active_panel_from_id = cc_test_window_set_active_panel_from_id;
|
|
iface->embed_widget_in_header = cc_test_window_embed_widget_in_header;
|
|
iface->get_toplevel = cc_test_window_get_toplevel;
|
|
}
|
|
|
|
/* GObject Implementation */
|
|
static void
|
|
cc_test_window_get_property (GObject *object,
|
|
guint property_id,
|
|
GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (object);
|
|
|
|
switch (property_id)
|
|
{
|
|
case PROP_ACTIVE_PANEL:
|
|
g_value_set_object (value, self->active_panel);
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
cc_test_window_set_property (GObject *object,
|
|
guint property_id,
|
|
const GValue *value,
|
|
GParamSpec *pspec)
|
|
{
|
|
CcTestWindow *shell = CC_TEST_WINDOW (object);
|
|
|
|
switch (property_id)
|
|
{
|
|
case PROP_ACTIVE_PANEL:
|
|
set_active_panel (shell, g_value_get_object (value));
|
|
break;
|
|
|
|
default:
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
|
|
}
|
|
}
|
|
|
|
static void
|
|
cc_test_window_dispose (GObject *object)
|
|
{
|
|
CcTestWindow *self = CC_TEST_WINDOW (object);
|
|
|
|
g_clear_object (&self->active_panel);
|
|
|
|
G_OBJECT_CLASS (cc_test_window_parent_class)->dispose (object);
|
|
}
|
|
|
|
static void
|
|
cc_test_window_class_init (CcTestWindowClass *klass)
|
|
{
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
object_class->get_property = cc_test_window_get_property;
|
|
object_class->set_property = cc_test_window_set_property;
|
|
object_class->dispose = cc_test_window_dispose;
|
|
|
|
g_object_class_override_property (object_class, PROP_ACTIVE_PANEL, "active-panel");
|
|
}
|
|
|
|
static void
|
|
cc_test_window_init (CcTestWindow *self)
|
|
{
|
|
gtk_widget_set_size_request (GTK_WIDGET (self), 500, 800);
|
|
|
|
self->main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
|
|
|
|
gtk_container_add (GTK_CONTAINER (self), self->main_box);
|
|
gtk_widget_show (self->main_box);
|
|
}
|
|
|
|
CcTestWindow *
|
|
cc_test_window_new (void)
|
|
{
|
|
return g_object_new (CC_TYPE_TEST_WINDOW,
|
|
"resizable", TRUE,
|
|
"title", "Test Settings",
|
|
"window-position", GTK_WIN_POS_CENTER,
|
|
NULL);
|
|
}
|