source: proiecte/PPPP/gdm/debian/patches/22_shutdown_menu.patch @ 134

Last change on this file since 134 was 134, checked in by (none), 14 years ago

gdm sources with the modifications for webcam

File size: 9.3 KB
  • gui/simple-greeter/gdm-greeter-login-window.c

    #
    # Description: Move shutdown menu to lower right hand corner as it is easy to accidentally use below user list
    # Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/434338
    # Upstream: http://bugzilla.gnome.org/show_bug.cgi?id=596151
    #
    diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/gdm-greeter-login-window.c gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-login-window.c
    old new  
    550550        show_suspend_button = FALSE;
    551551#endif
    552552
     553        /* Buttons now in shutdown menu */
     554        show_restart_buttons = FALSE;
     555        show_suspend_button = FALSE;
     556
    553557        /* we want to run this even if we're supposed to
    554558           be in the mode already so that we reset everything
    555559           to a known state */
  • gui/simple-greeter/gdm-greeter-panel.c

    diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/gdm-greeter-panel.c gdm-2.28.1.new/gui/simple-greeter/gdm-greeter-panel.c
    old new  
    3434
    3535#include <gconf/gconf-client.h>
    3636
     37#include <devkit-power-gobject/devicekit-power.h>
     38
    3739#include "gdm-languages.h"
    3840#include "gdm-layouts.h"
    3941#include "gdm-greeter-panel.h"
     
    6668
    6769        char                   *default_session_name;
    6870        char                   *default_language_name;
     71
     72        DkpClient              *dkp_client;
    6973};
    7074
    7175enum {
     
    564568}
    565569
    566570static void
     571do_system_suspend (GtkWidget       *widget,
     572                   GdmGreeterPanel       *login_window)
     573{
     574        gboolean ret;
     575        GError *error;
     576       
     577        g_debug ("GdmGreeterPanel: Suspend button clicked");
     578        ret = dkp_client_suspend (login_window->priv->dkp_client, &error);
     579        if (!ret) {
     580                g_warning ("Suspend failure: %s", error->message);
     581                g_error_free (error);
     582        }
     583}
     584
     585static void
     586do_system_hibernate (GtkWidget       *widget,
     587                     GdmGreeterPanel *login_window)
     588{
     589        gboolean ret;
     590        GError *error;
     591       
     592        g_debug ("GdmGreeterPanel: Hibernate button clicked");
     593        ret = dkp_client_hibernate (login_window->priv->dkp_client, &error);
     594        if (!ret) {
     595                g_warning ("Hibernate failure: %s", error->message);
     596                g_error_free (error);
     597        }
     598}
     599
     600#include <dbus/dbus-glib.h>
     601
     602#define CK_NAME              "org.freedesktop.ConsoleKit"
     603#define CK_MANAGER_PATH      "/org/freedesktop/ConsoleKit/Manager"
     604#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager"
     605
     606static gboolean
     607try_system_stop (DBusGConnection *connection,
     608                 GError         **error)
     609{
     610        DBusGProxy      *proxy;
     611        gboolean         res;
     612
     613        g_debug ("GdmGreeterPanel: trying to stop system");
     614
     615        proxy = dbus_g_proxy_new_for_name (connection,
     616                                           CK_NAME,
     617                                           CK_MANAGER_PATH,
     618                                           CK_MANAGER_INTERFACE);
     619        res = dbus_g_proxy_call_with_timeout (proxy,
     620                                              "Stop",
     621                                              INT_MAX,
     622                                              error,
     623                                              /* parameters: */
     624                                              G_TYPE_INVALID,
     625                                              /* return values: */
     626                                              G_TYPE_INVALID);
     627        return res;
     628}
     629
     630static gboolean
     631try_system_restart (DBusGConnection *connection,
     632                    GError         **error)
     633{
     634        DBusGProxy      *proxy;
     635        gboolean         res;
     636
     637        g_debug ("GdmGreeterPanel: trying to restart system");
     638
     639        proxy = dbus_g_proxy_new_for_name (connection,
     640                                           CK_NAME,
     641                                           CK_MANAGER_PATH,
     642                                           CK_MANAGER_INTERFACE);
     643        res = dbus_g_proxy_call_with_timeout (proxy,
     644                                              "Restart",
     645                                              INT_MAX,
     646                                              error,
     647                                              /* parameters: */
     648                                              G_TYPE_INVALID,
     649                                              /* return values: */
     650                                              G_TYPE_INVALID);
     651        return res;
     652}
     653
     654static void
     655do_system_restart ()
     656{
     657        gboolean         res;
     658        GError          *error;
     659        DBusGConnection *connection;
     660
     661        error = NULL;
     662        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
     663        if (connection == NULL) {
     664                g_warning ("Unable to get system bus connection: %s", error->message);
     665                g_error_free (error);
     666                return;
     667        }
     668
     669        res = try_system_restart (connection, &error);
     670        if (!res) {
     671                g_debug ("GdmGreeterPanel: unable to restart system: %s: %s",
     672                         dbus_g_error_get_name (error),
     673                         error->message);
     674                g_error_free (error);
     675        }
     676}
     677
     678static void
     679do_system_stop ()
     680{
     681        gboolean         res;
     682        GError          *error;
     683        DBusGConnection *connection;
     684
     685        error = NULL;
     686        connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
     687        if (connection == NULL) {
     688                g_warning ("Unable to get system bus connection: %s", error->message);
     689                g_error_free (error);
     690                return;
     691        }
     692
     693        res = try_system_stop (connection, &error);
     694        if (!res) {
     695                g_debug ("GdmGreeterPanel: unable to stop system: %s: %s",
     696                         dbus_g_error_get_name (error),
     697                         error->message);
     698                g_error_free (error);
     699        }
     700}
     701
     702static void
    567703gdm_greeter_panel_init (GdmGreeterPanel *panel)
    568704{
    569705        NaTray    *tray;
     
    642778                gtk_widget_show (panel->priv->hostname_label);
    643779        }
    644780
     781        {
     782                GtkWidget *shutdown_menu;
     783                GtkWidget *menu, *menu_item;
     784
     785                panel->priv->dkp_client = dkp_client_new ();
     786
     787                shutdown_menu = gtk_menu_bar_new ();
     788
     789                menu_item = gtk_image_menu_item_new ();
     790                menu = gtk_menu_new ();
     791                gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
     792                gtk_menu_item_set_label (GTK_MENU_ITEM (menu_item), "");
     793                gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item),
     794                                               gtk_image_new_from_icon_name ("system-shutdown", GTK_ICON_SIZE_BUTTON));
     795                gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menu_item), TRUE);
     796                gtk_menu_shell_append (GTK_MENU_SHELL (shutdown_menu), menu_item);
     797
     798                if (dkp_client_can_suspend (panel->priv->dkp_client)) {
     799                        menu_item = gtk_menu_item_new_with_label (_("Suspend"));
     800                        g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_suspend), panel);
     801                        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
     802                }
     803
     804                if (dkp_client_can_hibernate (panel->priv->dkp_client)) {           
     805                        menu_item = gtk_menu_item_new_with_label (_("Hibernate"));
     806                        g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_hibernate), panel);
     807                        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
     808                }
     809
     810                menu_item = gtk_menu_item_new_with_label (_("Restart"));
     811                g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_restart), NULL);
     812                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
     813
     814                menu_item = gtk_menu_item_new_with_label (_("Shut Down"));
     815                g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_system_stop), NULL);
     816                gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
     817
     818                gtk_box_pack_end (GTK_BOX (panel->priv->hbox), GTK_WIDGET (shutdown_menu), FALSE, FALSE, 0);
     819                gtk_widget_show_all (GTK_WIDGET (shutdown_menu));
     820        }
     821
    645822        panel->priv->clock = gdm_clock_widget_new ();
    646823        gtk_box_pack_end (GTK_BOX (panel->priv->hbox),
    647824                            GTK_WIDGET (panel->priv->clock), FALSE, FALSE, 6);
  • gui/simple-greeter/Makefile.am

    diff -Nur -x '*.orig' -x '*~' gdm-2.28.1/gui/simple-greeter/Makefile.am gdm-2.28.1.new/gui/simple-greeter/Makefile.am
    old new  
    142142        $(top_builddir)/common/libgdmcommon.la  \
    143143        $(top_builddir)/gui/simple-greeter/libnotificationarea/libnotificationarea.la   \
    144144        $(SIMPLE_GREETER_LIBS)          \
     145        $(DEVKIT_POWER_LIBS)            \
    145146        $(GTK_LIBS)                     \
    146147        $(GCONF_LIBS)                   \
    147148        $(LIBXKLAVIER_LIBS)             \
Note: See TracBrowser for help on using the repository browser.