Browse Source

Fix/reimplement kiosk mode (bug #1993). Also attempt to fix linking with -Wl,--as-needed (bug #1977).

(Old svn revision: 22442)
upstream/xfce4-panel-4.10.1
Jasper Huijsmans 17 years ago
parent
commit
ad96975ac0
  1. 1
      Makefile.am
  2. 1
      libxfce4panel/Makefile.am
  3. 2
      libxfce4panel/libxfce4panel-1.0.pc.in
  4. 30
      libxfce4panel/xfce-panel-convenience.c
  5. 8
      libxfce4panel/xfce-panel-convenience.h
  6. 132
      libxfce4panel/xfce-panel-plugin-iface.c
  7. 2
      panel/Makefile.am
  8. 16
      panel/panel-app.c
  9. 18
      panel/panel-config.c
  10. 46
      panel/panel.c

1
Makefile.am

@ -18,6 +18,7 @@ EXTRA_DIST = \
xfce4-panel.spec
DISTCLEANFILES = \
configure.ac \
intltool-extract \
intltool-merge \
intltool-update

1
libxfce4panel/Makefile.am

@ -54,6 +54,7 @@ xfce4_panelinclude_HEADERS = \
libxfce4panel_la_CFLAGS = \
-I$(top_srcdir) \
-DLOCALEDIR=\"$(localedir)\" \
@LIBXFCE4UTIL_CFLAGS@ \
@LIBXFCEGUI4_CFLAGS@
libxfce4panel_la_LDFLAGS = \

2
libxfce4panel/libxfce4panel-1.0.pc.in

@ -12,7 +12,7 @@ desktopdatadir=${datadir}/xfce4/panel-plugins
Name: libxfce4panel
Description: Library for the Xfce Panel
Requires: libxfcegui4-1.0
Requires: libxfcegui4-1.0 libxfce4util-1.0
Version: @VERSION@
Libs: -L${libdir} -lxfce4panel
Cflags: -I${includedir}/xfce4/

30
libxfce4panel/xfce-panel-convenience.c

@ -23,6 +23,7 @@
#include <config.h>
#endif
#include <libxfce4util/libxfce4util.h>
#include <gtk/gtk.h>
#include "xfce-panel-convenience.h"
@ -64,3 +65,32 @@ GtkWidget *xfce_create_panel_toggle_button (void)
return button;
}
/**
* xfce_allow_panel_customization:
*
* Check if the user is allowed to customize the panel. Uses the kiosk mode
* implementation from libxfce4util.
*
* Returns: %TRUE if the user is allowed to customize the panel, %FALSE
* otherwise.
**/
gboolean
xfce_allow_panel_customization (void )
{
static gboolean allow_customization = FALSE;
static gboolean checked = FALSE;
if (G_UNLIKELY (!checked))
{
XfceKiosk *kiosk = NULL;
kiosk = xfce_kiosk_new ("xfce4-panel");
allow_customization = xfce_kiosk_query (kiosk, "CustomizePanel");
xfce_kiosk_free (kiosk);
checked = TRUE;
}
return allow_customization;
}

8
libxfce4panel/xfce-panel-convenience.h

@ -22,12 +22,20 @@
#ifndef _XFCE_PANEL_CONVENIENCE_H
#define _XFCE_PANEL_CONVENIENCE_H
#include <gtk/gtkwidget.h>
G_BEGIN_DECLS
/* widgets */
GtkWidget *xfce_create_panel_button (void);
GtkWidget *xfce_create_panel_toggle_button (void);
/* configuration */
gboolean xfce_allow_panel_customization (void );
G_END_DECLS
#endif /* _XFCE_PANEL_CONVENIENCE_H */

132
libxfce4panel/xfce-panel-plugin-iface.c

@ -27,6 +27,7 @@
#include <gtk/gtk.h>
#include <libxfcegui4/dialogs.h>
#include "xfce-panel-convenience.h"
#include "xfce-panel-plugin-iface.h"
#include "xfce-panel-plugin-iface-private.h"
#include "xfce-panel-enum-types.h"
@ -725,9 +726,12 @@ xfce_panel_plugin_create_menu (XfcePanelPlugin *plugin)
GtkWidget *menu, *mi, *img;
int insert_position;
int configure_position;
gboolean allow_customization;
g_return_if_fail (XFCE_IS_PANEL_PLUGIN (plugin));
allow_customization = xfce_allow_panel_customization ();
xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
menu = gtk_menu_new ();
@ -774,70 +778,78 @@ xfce_panel_plugin_create_menu (XfcePanelPlugin *plugin)
plugin);
/* move */
mi = gtk_image_menu_item_new_with_label (_("Move"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_move),
plugin);
if (allow_customization)
{
mi = gtk_image_menu_item_new_with_label (_("Move"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_GO_FORWARD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
/* insert custom items after move */
insert_position = 5;
g_object_set_data (G_OBJECT (plugin), "xfce-panel-plugin-insert-position",
GINT_TO_POINTER (insert_position));
/* remove */
mi = gtk_separator_menu_item_new();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_move),
plugin);
mi = gtk_image_menu_item_new_with_label (_("Remove"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
/* insert custom items after move */
insert_position = 5;
img = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_remove_confirm),
plugin);
/* remove */
mi = gtk_separator_menu_item_new();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
mi = gtk_image_menu_item_new_with_label (_("Remove"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_REMOVE, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_remove_confirm),
plugin);
/* panel section */
mi = gtk_separator_menu_item_new();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
mi = gtk_image_menu_item_new_with_label (_("Add New Item"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
/* panel section */
mi = gtk_separator_menu_item_new();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_customize_items),
plugin);
mi = gtk_image_menu_item_new_with_label (_("Add New Item"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
mi = gtk_image_menu_item_new_with_label (_("Customize Panel"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_customize_items),
plugin);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_customize_panel),
plugin);
}
else
{
/* insert custom items after about */
insert_position = 4;
}
mi = gtk_image_menu_item_new_with_label (_("Customize Panel"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_object_set_data (G_OBJECT (plugin), "xfce-panel-plugin-insert-position",
GINT_TO_POINTER (insert_position));
img = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (xfce_panel_plugin_customize_panel),
plugin);
/* deactivation */
g_signal_connect (menu, "deactivate",
G_CALLBACK (_plugin_menu_deactivate), NULL);
@ -1009,8 +1021,12 @@ xfce_panel_plugin_menu_show_about (XfcePanelPlugin *plugin)
void
xfce_panel_plugin_menu_show_configure (XfcePanelPlugin *plugin)
{
GtkWidget *menu =
g_object_get_data (G_OBJECT (plugin), "xfce-panel-plugin-menu");
GtkWidget *menu;
if (!xfce_allow_panel_customization())
return;
menu = g_object_get_data (G_OBJECT (plugin), "xfce-panel-plugin-menu");
if (menu)
{

2
panel/Makefile.am

@ -25,6 +25,7 @@ xfce4_panel_CFLAGS = \
-I$(top_srcdir) \
@LIBSTARTUP_NOTIFICATION_CFLAGS@ \
@LIBX11_CFLAGS@ \
@LIBXFCE4UTIL_CFLAGS@ \
@LIBXFCEGUI4_CFLAGS@ \
-DDATADIR=\"$(datadir)\" \
-DLIBDIR=\"$(libdir)/xfce4\" \
@ -43,6 +44,7 @@ xfce4_panel_LDADD = \
../libxfce4panel/libxfce4panel.la \
@LIBSTARTUP_NOTIFICATION_LIBS@ \
@LIBX11_LIBS@ \
@LIBXFCE4UTIL_LIBS@ \
@LIBXFCEGUI4_LIBS@
xfce4_panel_DEPENDENCIES = \

16
panel/panel-app.c

@ -31,6 +31,7 @@
#include <X11/Xlib.h>
#include <gtk/gtk.h>
#include <libxfcegui4/libxfcegui4.h>
#include <libxfce4panel/xfce-panel-convenience.h>
#include "panel-app.h"
#include "panel-app-messages.h"
@ -655,19 +656,22 @@ panel_app_queue_save (void)
void
panel_app_customize (void)
{
panel_manager_dialog (panel_app.panel_list);
if (xfce_allow_panel_customization())
panel_manager_dialog (panel_app.panel_list);
}
void
panel_app_customize_items (GtkWidget *active_item)
{
add_items_dialog (panel_app.panel_list, active_item);
if (xfce_allow_panel_customization())
add_items_dialog (panel_app.panel_list, active_item);
}
void
panel_app_save (void)
{
panel_config_save_panels (panel_app.panel_list);
if (xfce_allow_panel_customization())
panel_config_save_panels (panel_app.panel_list);
}
void
@ -703,6 +707,9 @@ panel_app_add_panel (void)
{
Panel *panel;
if (!xfce_allow_panel_customization())
return;
panel = panel_new ();
if (G_UNLIKELY (panel_app.panel_list == NULL))
@ -728,6 +735,9 @@ panel_app_remove_panel (GtkWidget *panel)
int response = GTK_RESPONSE_NONE, n;
char *first;
if (xfce_allow_panel_customization())
return;
if (panel_app.panel_list->len == 1)
{
response =

18
panel/panel-config.c

@ -30,10 +30,12 @@
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <libxfce4util/libxfce4util.h>
#include <gdk/gdkx.h>
#include <gtk/gtkenums.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfce4panel/xfce-panel-convenience.h>
#include "panel-config.h"
#include "panel-private.h"
#include "panel.h"
@ -94,14 +96,11 @@ create_panel_array_from_config (const char *file)
GPtrArray *
panel_config_create_panels (void)
{
XfceKiosk *kiosk = NULL;
gboolean use_user_config = TRUE;
char *file = NULL;
GPtrArray *array = NULL;
gboolean use_user_config;
kiosk = xfce_kiosk_new ("xfce4-panel");
use_user_config = xfce_kiosk_query (kiosk, "CustomizePanel");
xfce_kiosk_free (kiosk);
use_user_config = xfce_allow_panel_customization ();
if (G_UNLIKELY (!use_user_config))
{
@ -150,14 +149,11 @@ panel_config_create_panels (void)
gboolean
panel_config_save_panels (GPtrArray * panels)
{
XfceKiosk *kiosk = NULL;
gboolean use_user_config = TRUE;
char *file = NULL;
gboolean failed = FALSE;
gboolean use_user_config;
kiosk = xfce_kiosk_new ("xfce4-panel");
use_user_config = xfce_kiosk_query (kiosk, "CustomizePanel");
xfce_kiosk_free (kiosk);
use_user_config = xfce_allow_panel_customization ();
if (use_user_config)
{

46
panel/panel.c

@ -33,6 +33,7 @@
#include <libxfce4panel/xfce-panel-item-iface.h>
#include <libxfce4panel/xfce-panel-enum-types.h>
#include <libxfce4panel/xfce-panel-convenience.h>
#include "panel.h"
#include "panel-app.h"
@ -653,31 +654,34 @@ _panel_create_menu (Panel *panel)
menu = gtk_menu_new ();
mi = gtk_image_menu_item_new_with_label (_("Customize Panel"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
if (xfce_allow_panel_customization ())
{
mi = gtk_image_menu_item_new_with_label (_("Customize Panel"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
img = gtk_image_new_from_stock (GTK_STOCK_PREFERENCES, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect (mi, "activate", G_CALLBACK (panel_app_customize),
NULL);
mi = gtk_image_menu_item_new_with_label (_("Add Items"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect (mi, "activate", G_CALLBACK (panel_app_customize),
NULL);
mi = gtk_image_menu_item_new_with_label (_("Add Items"));
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
img = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_MENU);
gtk_widget_show (img);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (mi), img);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (panel_app_customize_items), NULL);
mi = gtk_separator_menu_item_new ();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
g_signal_connect_swapped (mi, "activate",
G_CALLBACK (panel_app_customize_items), NULL);
mi = gtk_separator_menu_item_new ();
gtk_widget_show (mi);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);
}
mi = gtk_image_menu_item_new_with_label (_("Quit"));
gtk_widget_show (mi);

Loading…
Cancel
Save