summaryrefslogtreecommitdiff
path: root/gui/simple-greeter/gdm-greeter-panel.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/simple-greeter/gdm-greeter-panel.c')
-rw-r--r--gui/simple-greeter/gdm-greeter-panel.c436
1 files changed, 0 insertions, 436 deletions
diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c
deleted file mode 100644
index a41ec172..00000000
--- a/gui/simple-greeter/gdm-greeter-panel.c
+++ /dev/null
@@ -1,436 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
- *
- * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
- *
- * 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.
- *
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <glib-object.h>
-#include <gtk/gtk.h>
-
-#include "gdm-greeter-panel.h"
-
-#include "na-tray.h"
-
-#define GDM_GREETER_PANEL_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_PANEL, GdmGreeterPanelPrivate))
-
-struct GdmGreeterPanelPrivate
-{
- int monitor;
- GdkRectangle geometry;
- GtkWidget *hbox;
-};
-
-enum {
- PROP_0,
-};
-
-static void gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass);
-static void gdm_greeter_panel_init (GdmGreeterPanel *greeter_panel);
-static void gdm_greeter_panel_finalize (GObject *object);
-
-G_DEFINE_TYPE (GdmGreeterPanel, gdm_greeter_panel, GTK_TYPE_WINDOW)
-
-static void
-gdm_greeter_panel_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdmGreeterPanel *self;
-
- self = GDM_GREETER_PANEL (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-gdm_greeter_panel_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GdmGreeterPanel *self;
-
- self = GDM_GREETER_PANEL (object);
-
- switch (prop_id) {
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static GObject *
-gdm_greeter_panel_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GdmGreeterPanel *greeter_panel;
- GdmGreeterPanelClass *klass;
-
- klass = GDM_GREETER_PANEL_CLASS (g_type_class_peek (GDM_TYPE_GREETER_PANEL));
-
- greeter_panel = GDM_GREETER_PANEL (G_OBJECT_CLASS (gdm_greeter_panel_parent_class)->constructor (type,
- n_construct_properties,
- construct_properties));
-
- return G_OBJECT (greeter_panel);
-}
-
-static void
-gdm_greeter_panel_dispose (GObject *object)
-{
- GdmGreeterPanel *greeter_panel;
-
- greeter_panel = GDM_GREETER_PANEL (object);
-
- g_debug ("Disposing greeter_panel");
-
- G_OBJECT_CLASS (gdm_greeter_panel_parent_class)->dispose (object);
-}
-
-/* copied from panel-toplevel.c */
-static void
-gdm_greeter_panel_move_resize_window (GdmGreeterPanel *panel,
- gboolean move,
- gboolean resize)
-{
- GtkWidget *widget;
-
- widget = GTK_WIDGET (panel);
-
- g_assert (GTK_WIDGET_REALIZED (widget));
-
- if (move && resize) {
- gdk_window_move_resize (widget->window,
- panel->priv->geometry.x,
- panel->priv->geometry.y,
- panel->priv->geometry.width,
- panel->priv->geometry.height);
- } else if (move) {
- gdk_window_move (widget->window,
- panel->priv->geometry.x,
- panel->priv->geometry.y);
- } else if (resize) {
- gdk_window_resize (widget->window,
- panel->priv->geometry.width,
- panel->priv->geometry.height);
- }
-}
-
-static void
-on_screen_size_changed (GdkScreen *screen,
- GdmGreeterPanel *panel)
-{
- gtk_widget_queue_resize (GTK_WIDGET (panel));
-}
-
-static void
-gdm_greeter_panel_real_realize (GtkWidget *widget)
-{
- if (GTK_WIDGET_CLASS (gdm_greeter_panel_parent_class)->realize) {
- GTK_WIDGET_CLASS (gdm_greeter_panel_parent_class)->realize (widget);
- }
-
- gdm_greeter_panel_move_resize_window (GDM_GREETER_PANEL (widget), TRUE, TRUE);
-
- g_signal_connect (gtk_window_get_screen (GTK_WINDOW (widget)),
- "size_changed",
- G_CALLBACK (on_screen_size_changed),
- widget);
-}
-
-static void
-gdm_greeter_panel_real_unrealize (GtkWidget *widget)
-{
- g_signal_handlers_disconnect_by_func (gtk_window_get_screen (GTK_WINDOW (widget)),
- on_screen_size_changed,
- widget);
-
- if (GTK_WIDGET_CLASS (gdm_greeter_panel_parent_class)->unrealize) {
- GTK_WIDGET_CLASS (gdm_greeter_panel_parent_class)->unrealize (widget);
- }
-}
-
-static GdkRegion *
-get_outside_region (GdmGreeterPanel *panel)
-{
- int i;
- GdkRegion *region;
-
- region = gdk_region_new ();
- for (i = 0; i < panel->priv->monitor; i++) {
- GdkRectangle geometry;
-
- gdk_screen_get_monitor_geometry (GTK_WINDOW (panel)->screen,
- i,
- &geometry);
- gdk_region_union_with_rect (region, &geometry);
- }
-
- return region;
-}
-
-static void
-get_monitor_geometry (GdmGreeterPanel *panel,
- GdkRectangle *geometry)
-{
- GdkRegion *outside_region;
- GdkRegion *monitor_region;
- GdkRectangle geom;
-
- outside_region = get_outside_region (panel);
-
- gdk_screen_get_monitor_geometry (GTK_WINDOW (panel)->screen,
- panel->priv->monitor,
- &geom);
- monitor_region = gdk_region_rectangle (&geom);
- gdk_region_subtract (monitor_region, outside_region);
- gdk_region_destroy (outside_region);
-
- gdk_region_get_clipbox (monitor_region, geometry);
- gdk_region_destroy (monitor_region);
-}
-
-static void
-set_struts (GdmGreeterPanel *panel,
- int x,
- int y,
- int width,
- int height)
-{
- gulong data[12] = { 0, };
- int screen_height;
-
- /* _NET_WM_STRUT_PARTIAL: CARDINAL[12]/32
- *
- * 0: left 1: right 2: top 3: bottom
- * 4: left_start_y 5: left_end_y 6: right_start_y 7: right_end_y
- * 8: top_start_x 9: top_end_x 10: bottom_start_x 11: bottom_end_x
- *
- * Note: In xinerama use struts relative to combined screen dimensions,
- * not just the current monitor.
- */
-
- /* for bottom panel */
- screen_height = gdk_screen_get_height (gtk_window_get_screen (GTK_WINDOW (panel)));
-
- /* bottom */
- data[3] = screen_height - panel->priv->geometry.y - panel->priv->geometry.height + height;
- /* bottom_start_x */
- data[10] = x;
- /* bottom_end_x */
- data[11] = x + width;
-
- g_debug ("Setting strut: bottom=%lu bottom_start_x=%lu bottom_end_x=%lu", data[3], data[10], data[11]);
-
- gdk_error_trap_push ();
-
- gdk_property_change (GTK_WIDGET (panel)->window,
- gdk_atom_intern ("_NET_WM_STRUT_PARTIAL", FALSE),
- gdk_atom_intern ("CARDINAL", FALSE),
- 32,
- GDK_PROP_MODE_REPLACE,
- (guchar *) &data,
- 12);
-
- gdk_property_change (GTK_WIDGET (panel)->window,
- gdk_atom_intern ("_NET_WM_STRUT", FALSE),
- gdk_atom_intern ("CARDINAL", FALSE),
- 32,
- GDK_PROP_MODE_REPLACE,
- (guchar *) &data,
- 4);
-
- gdk_error_trap_pop ();
-}
-
-static void
-update_struts (GdmGreeterPanel *panel)
-{
- GdkRectangle geometry;
-
- get_monitor_geometry (panel, &geometry);
-
- /* FIXME: assumes only one panel */
- set_struts (panel,
- panel->priv->geometry.x,
- panel->priv->geometry.y,
- panel->priv->geometry.width,
- panel->priv->geometry.height);
-}
-
-static void
-update_geometry (GdmGreeterPanel *panel,
- GtkRequisition *requisition)
-{
- GdkRectangle geometry;
- int height;
-
- get_monitor_geometry (panel, &geometry);
-
- height = requisition->height;
- panel->priv->geometry.width = geometry.width;
- panel->priv->geometry.height = height * 2;
-
- panel->priv->geometry.x = geometry.x;
- panel->priv->geometry.y = geometry.y + geometry.height - panel->priv->geometry.height;
-
- g_debug ("Setting geometry x:%d y:%d w:%d h:%d",
- panel->priv->geometry.x,
- panel->priv->geometry.y,
- panel->priv->geometry.width,
- panel->priv->geometry.height);
-
- update_struts (panel);
-}
-
-static void
-gdm_greeter_panel_real_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
-{
- GdmGreeterPanel *panel;
- GtkBin *bin;
- GdkRectangle old_geometry;
- int position_changed = FALSE;
- int size_changed = FALSE;
-
- panel = GDM_GREETER_PANEL (widget);
- bin = GTK_BIN (widget);
-
- if (bin->child && GTK_WIDGET_VISIBLE (bin->child)) {
- gtk_widget_size_request (bin->child, requisition);
- }
-
- old_geometry = panel->priv->geometry;
-
- update_geometry (panel, requisition);
-
- requisition->width = panel->priv->geometry.width;
- requisition->height = panel->priv->geometry.height;
-
- if (! GTK_WIDGET_REALIZED (widget)) {
- return;
- }
-
- if (old_geometry.width != panel->priv->geometry.width ||
- old_geometry.height != panel->priv->geometry.height) {
- size_changed = TRUE;
- }
-
- if (old_geometry.x != panel->priv->geometry.x ||
- old_geometry.y != panel->priv->geometry.y) {
- position_changed = TRUE;
- }
-
- gdm_greeter_panel_move_resize_window (panel, position_changed, size_changed);
-}
-
-static void
-gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- object_class->get_property = gdm_greeter_panel_get_property;
- object_class->set_property = gdm_greeter_panel_set_property;
- object_class->constructor = gdm_greeter_panel_constructor;
- object_class->dispose = gdm_greeter_panel_dispose;
- object_class->finalize = gdm_greeter_panel_finalize;
-
- widget_class->realize = gdm_greeter_panel_real_realize;
- widget_class->unrealize = gdm_greeter_panel_real_unrealize;
- widget_class->size_request = gdm_greeter_panel_real_size_request;
-
- g_type_class_add_private (klass, sizeof (GdmGreeterPanelPrivate));
-}
-
-static void
-gdm_greeter_panel_init (GdmGreeterPanel *panel)
-{
- GtkWidget *label;
- NaTray *tray;
-
- panel->priv = GDM_GREETER_PANEL_GET_PRIVATE (panel);
-
- panel->priv->geometry.x = -1;
- panel->priv->geometry.y = -1;
- panel->priv->geometry.width = -1;
- panel->priv->geometry.height = -1;
-
- gtk_window_set_decorated (GTK_WINDOW (panel), FALSE);
-
- gtk_window_set_skip_taskbar_hint (GTK_WINDOW (panel), TRUE);
- gtk_window_set_skip_pager_hint (GTK_WINDOW (panel), TRUE);
-
- gtk_window_set_keep_above (GTK_WINDOW (panel), TRUE);
- gtk_window_set_type_hint (GTK_WINDOW (panel), GDK_WINDOW_TYPE_HINT_DOCK);
- gtk_window_set_opacity (GTK_WINDOW (panel), 0.75);
-
- panel->priv->hbox = gtk_hbox_new (FALSE, 12);
- gtk_widget_show (panel->priv->hbox);
- gtk_container_add (GTK_CONTAINER (panel), panel->priv->hbox);
-
- label = gtk_label_new (g_get_host_name ());
- gtk_box_pack_start (GTK_BOX (panel->priv->hbox), label, FALSE, FALSE, 6);
- gtk_widget_show (label);
-
- tray = na_tray_new_for_screen (gtk_window_get_screen (GTK_WINDOW (panel)),
- GTK_ORIENTATION_HORIZONTAL);
- gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (tray), FALSE, FALSE, 6);
- gtk_widget_show (GTK_WIDGET (tray));
-
-}
-
-static void
-gdm_greeter_panel_finalize (GObject *object)
-{
- GdmGreeterPanel *greeter_panel;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GDM_IS_GREETER_PANEL (object));
-
- greeter_panel = GDM_GREETER_PANEL (object);
-
- g_return_if_fail (greeter_panel->priv != NULL);
-
- G_OBJECT_CLASS (gdm_greeter_panel_parent_class)->finalize (object);
-}
-
-GtkWidget *
-gdm_greeter_panel_new (void)
-{
- GObject *object;
-
- object = g_object_new (GDM_TYPE_GREETER_PANEL,
- NULL);
-
- return GTK_WIDGET (object);
-}