Added a helper to rotate the screen by 90 degrees

This commit is contained in:
Pierre Pronchery 2012-03-18 05:51:14 +00:00
parent d700bb221e
commit ba6bc608ea
5 changed files with 46 additions and 4 deletions

View File

@ -42,6 +42,7 @@ typedef struct _PanelAppletHelper
void (*position_menu)(Panel * panel, GtkMenu * menu, gint * x, gint * y,
gboolean * push_in);
void (*preferences_dialog)(Panel * panel);
void (*rotate_screen)(Panel * panel);
void (*shutdown_dialog)(Panel * panel);
int (*suspend)(Panel * panel);
} PanelAppletHelper;

View File

@ -20,8 +20,8 @@ subdirs:
@for i in $(SUBDIRS); do (cd $$i && $(MAKE)) || exit; done
panel_OBJS = panel.o window.o main.o
panel_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) -D PREFIX=\"$(PREFIX)\" $(CFLAGSF) $(CFLAGS) `pkg-config --cflags libSystem libDesktop`
panel_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs libSystem libDesktop`
panel_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) -D PREFIX=\"$(PREFIX)\" $(CFLAGSF) $(CFLAGS) `pkg-config --cflags libSystem libDesktop xrandr`
panel_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) `pkg-config --libs libSystem libDesktop xrandr`
panel: $(panel_OBJS)
$(CC) -o panel $(panel_OBJS) $(panel_LDFLAGS)

View File

@ -88,6 +88,7 @@ static void _on_clicked(gpointer data);
static gboolean _on_idle(gpointer data);
static void _on_lock(gpointer data);
static void _on_logout(gpointer data);
static void _on_rotate(gpointer data);
static void _on_run(gpointer data);
static void _on_shutdown(gpointer data);
static void _on_suspend(gpointer data);
@ -315,12 +316,19 @@ static void _on_clicked(gpointer data)
g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_about), main);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
/* lock screen */
menuitem = gtk_separator_menu_item_new();
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
menuitem = _main_menuitem(_("Lock screen"), "gnome-lockscreen");
g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_lock), main);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
/* rotate screen */
menuitem = _main_menuitem(_("Rotate"), NULL);
g_signal_connect_swapped(G_OBJECT(menuitem), "activate",
G_CALLBACK(_on_rotate), data);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
/* logout */
if(main->helper->logout_dialog != NULL)
{
menuitem = _main_menuitem(_("Logout..."), "gnome-logout");
@ -328,6 +336,7 @@ static void _on_clicked(gpointer data)
G_CALLBACK(_on_logout), data);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
/* suspend */
if(main->helper->suspend != NULL)
{
menuitem = _main_menuitem(_("Suspend"), "gtk-media-pause");
@ -335,6 +344,7 @@ static void _on_clicked(gpointer data)
G_CALLBACK(_on_suspend), data);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
/* shutdown */
menuitem = _main_menuitem(_("Shutdown..."), "gnome-shutdown");
g_signal_connect_swapped(G_OBJECT(menuitem), "activate", G_CALLBACK(
_on_shutdown), data);
@ -463,6 +473,15 @@ static void _on_logout(gpointer data)
}
/* on_rotate */
static void _on_rotate(gpointer data)
{
Main * main = data;
main->helper->rotate_screen(main->helper->panel);
}
/* on_run */
static void _on_run(gpointer data)
{

View File

@ -37,6 +37,8 @@ static char const _license[] =
#include <libintl.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <X11/X.h>
#include <X11/extensions/Xrandr.h>
#include "window.h"
#include "panel.h"
#include "../config.h"
@ -144,6 +146,7 @@ static void _panel_helper_position_menu_bottom(Panel * panel, GtkMenu * menu,
static void _panel_helper_position_menu_top(Panel * panel, GtkMenu * menu,
gint * x, gint * y, gboolean * push_in);
static void _panel_helper_preferences_dialog(Panel * panel);
static void _panel_helper_rotate_screen(Panel * panel);
static void _panel_helper_shutdown_dialog(Panel * panel);
static int _panel_helper_suspend(Panel * panel);
@ -194,6 +197,7 @@ Panel * panel_new(PanelPrefs const * prefs)
#endif
panel->top_helper.position_menu = _panel_helper_position_menu_top;
panel->top_helper.preferences_dialog = _panel_helper_preferences_dialog;
panel->top_helper.rotate_screen = _panel_helper_rotate_screen;
panel->top_helper.shutdown_dialog = _panel_helper_shutdown_dialog;
panel->top_helper.suspend = (_panel_can_suspend())
? _panel_helper_suspend : NULL;
@ -1513,6 +1517,24 @@ static void _panel_helper_preferences_dialog(Panel * panel)
}
/* panel_helper_rotate_screen */
static void _panel_helper_rotate_screen(Panel * panel)
{
GdkDisplay * display;
XRRScreenConfiguration * sc;
Rotation r;
SizeID size;
display = gdk_screen_get_display(panel->screen);
sc = XRRGetScreenInfo(GDK_DISPLAY_XDISPLAY(display),
GDK_WINDOW_XWINDOW(panel->root));
size = XRRConfigCurrentConfiguration(sc, &r);
r = (r == RR_Rotate_0) ? RR_Rotate_90 : RR_Rotate_0;
XRRSetScreenConfig(GDK_DISPLAY_XDISPLAY(display), sc,
GDK_WINDOW_XWINDOW(panel->root), size, r, CurrentTime);
}
/* panel_helper_shutdown_dialog */
static gboolean _shutdown_dialog_on_closex(gpointer data);
static void _shutdown_dialog_on_response(GtkWidget * widget, gint response,

View File

@ -10,8 +10,8 @@ dist=Makefile,panel.h,window.h
type=binary
sources=panel.c,window.c,main.c
cppflags=-D PREFIX=\"$(PREFIX)\"
cflags=`pkg-config --cflags libSystem libDesktop`
ldflags=`pkg-config --libs libSystem libDesktop`
cflags=`pkg-config --cflags libSystem libDesktop xrandr`
ldflags=`pkg-config --libs libSystem libDesktop xrandr`
install=$(BINDIR)
[main.c]