[Goodies-commits] r3918 - in xfce4-wmdock-plugin/trunk: . panel-plugin
Andre Ellguth
ellguth at xfce.org
Wed Feb 6 22:23:26 CET 2008
Author: ellguth
Date: 2008-02-06 21:23:25 +0000 (Wed, 06 Feb 2008)
New Revision: 3918
Modified:
xfce4-wmdock-plugin/trunk/ChangeLog
xfce4-wmdock-plugin/trunk/configure.in.in
xfce4-wmdock-plugin/trunk/panel-plugin/Makefile.am
xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
Log:
Improvment of the dockapp detection
Modified: xfce4-wmdock-plugin/trunk/ChangeLog
===================================================================
--- xfce4-wmdock-plugin/trunk/ChangeLog 2008-02-05 08:41:17 UTC (rev 3917)
+++ xfce4-wmdock-plugin/trunk/ChangeLog 2008-02-06 21:23:25 UTC (rev 3918)
@@ -1,3 +1,7 @@
+2008-02-06 Andre Ellguth <ellguth at ibh dot de>
+ * Improvment of the dockapp detection
+ * The dockapps will be now started cleanly ordered
+
2007-12-19 Andre Ellguth <ellguth at ibh dot de>
* The "Display tile in the background" switchs works now correctly
* Added missing xfce header files in wmdock.c for hvbox and xfce-arrow
Modified: xfce4-wmdock-plugin/trunk/configure.in.in
===================================================================
--- xfce4-wmdock-plugin/trunk/configure.in.in 2008-02-05 08:41:17 UTC (rev 3917)
+++ xfce4-wmdock-plugin/trunk/configure.in.in 2008-02-06 21:23:25 UTC (rev 3918)
@@ -5,7 +5,7 @@
dnl
dnl version info
-m4_define([wmdock_version], [0.1.8])
+m4_define([wmdock_version], [0.1.9])
dnl init autoconf
AC_INIT([xfce4-wmdock-plugin], [wmdock_version])
Modified: xfce4-wmdock-plugin/trunk/panel-plugin/Makefile.am
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/Makefile.am 2008-02-05 08:41:17 UTC (rev 3917)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/Makefile.am 2008-02-06 21:23:25 UTC (rev 3918)
@@ -31,4 +31,3 @@
CLEANFILES = \
$(desktop_DATA)
-
Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c 2008-02-05 08:41:17 UTC (rev 3917)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c 2008-02-06 21:23:25 UTC (rev 3918)
@@ -1,8 +1,12 @@
-/* $Id: wmdock.c,v 1.5 2007/12/19 19:31:08 ellguth Exp ellguth $
+/* $Id: wmdock.c,v 1.6 2008/02/06 20:44:42 ellguth Exp ellguth $
*
* wmdock xfce4 plugin by Andre Ellguth
*
* $Log: wmdock.c,v $
+ * Revision 1.6 2008/02/06 20:44:42 ellguth
+ * Improvment of the dockapp detection.
+ * The dockapps will be now started cleanly ordered.
+ *
* Revision 1.5 2007/12/19 19:31:08 ellguth
* The "Display tile in the background" switchs works now correctly.
* Added missing xfce header files in wmdock.c for hvbox and xfce-arrow.
@@ -32,6 +36,7 @@
#include <string.h>
#include <X11/Xatom.h>
+#include <X11/Xutil.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE
#include <libwnck/libwnck.h>
@@ -52,361 +57,483 @@
#define DEFAULT_DOCKAPP_WIDTH 64
#define DEFAULT_DOCKAPP_HEIGHT 64
#define FONT_WIDTH 4
+#define MAX_WAITCNT 10000
+#define WAITCNT_TIMEOUT 1000000
+#define BUF_MAX 4096
-Atom DockAppAtom;
-GtkWidget *wmdockIcon = NULL;
-GdkBitmap *gdkBmTile = NULL;
-GtkStyle *gtkStyTile;
-GdkPixmap *gdkPmTile = NULL;
-GdkPixbuf *gdkPbIcon = NULL;
-WmdockPlugin *wmdock = NULL;
+Atom XfceDockAppAtom;
+GtkWidget *wmdockIcon = NULL;
+GdkBitmap *gdkBmTile = NULL;
+GdkPixmap *gdkPmTile = NULL;
+GdkPixbuf *gdkPbIcon = NULL;
+WmdockPlugin *wmdock = NULL;
+gchar **rcCmds = NULL;
+gint rcCmdcnt = 0;
+
+/* #define DEBUG */
+
#ifdef DEBUG
/* fp needed for debug */
-FILE *fp;
+FILE *fp = (FILE *) NULL;
#endif
gboolean has_dockapp_hint(WnckWindow * w)
{
- Atom atype;
- int afmt;
- unsigned long int nitems;
- unsigned long int naft;
- gboolean ret=FALSE;
- unsigned char *dat;
- char *wname = NULL;
+ Atom atype;
+ int afmt, i;
+ unsigned long int nitems;
+ unsigned long int naft;
+ gboolean r = FALSE;
+ unsigned char *dat = NULL;
- gdk_error_trap_push();
- if (XGetWindowProperty(
+
+ gdk_error_trap_push();
+ if (XGetWindowProperty(
GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
- wnck_window_get_xid(w),DockAppAtom,0,1,False,
- XA_CARDINAL,&atype,&afmt,&nitems,&naft,&dat)==Success) {
- if (nitems==1 && ((long int *)dat)[0]==1) {
- ret=TRUE;
- }
- XFree(dat);
- }
- XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),False);
-
- /* Workaround for the dockapp wmnet */
- wname = (char *) wnck_window_get_name(w);
- if(wname) {
- if(!g_strcasecmp(wname, "wmnet")) ret = TRUE;
- }
-
- gdk_error_trap_pop();
- return ret;
+ wnck_window_get_xid(w), XfceDockAppAtom, 0, 1, False,
+ XA_CARDINAL, &atype, &afmt, &nitems, &naft, &dat) == Success) {
+ if (nitems==1 && ((long int *) dat)[0]==1) {
+ r = TRUE;
+ }
+ XFree(dat);
+ }
+ XSync(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),False);
+
+ gdk_error_trap_pop();
+
+ return (r);
}
GdkPixbuf *get_icon_from_xpm_scaled(const char **xpmData, gint width, gint height)
{
- GdkPixbuf *gdkPb = NULL;
- GdkPixbuf *gdkPbScaled = NULL;
+ GdkPixbuf *gdkPb = NULL;
+ GdkPixbuf *gdkPbScaled = NULL;
- gdkPb = gdk_pixbuf_new_from_xpm_data (xpmData);
+ gdkPb = gdk_pixbuf_new_from_xpm_data (xpmData);
- gdkPbScaled = gdk_pixbuf_scale_simple(gdkPb, width, height, GDK_INTERP_BILINEAR);
+ gdkPbScaled = gdk_pixbuf_scale_simple(gdkPb, width, height,
+ GDK_INTERP_BILINEAR);
- g_object_unref (G_OBJECT (gdkPb));
+ g_object_unref (G_OBJECT (gdkPb));
- return(gdkPbScaled);
+ return(gdkPbScaled);
}
void wmdock_destroy_dockapp(DockappNode *dapp)
{
- XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
- /*
- XKillClient(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
- */
+ XDestroyWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
+ /*
+ XKillClient(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i);
+ */
}
void wmdock_redraw_dockapp(DockappNode *dapp)
{
- gtk_widget_unmap (GTK_WIDGET(dapp->s));
+ gtk_widget_unmap (GTK_WIDGET(dapp->s));
- /* Tile in the background */
- if(wmdock->propDispTile == TRUE) {
- gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
- gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, gdkPmTile, FALSE);
- if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
- gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
- } else {
- gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, NULL, TRUE);
- }
+ /* Tile in the background */
+ if(wmdock->propDispTile == TRUE) {
+ gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
+ gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, gdkPmTile, FALSE);
+ if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
+ gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
+ } else {
+ gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, NULL, TRUE);
+ }
#ifdef DEBUG
- fprintf(fp, "Dockapp %s redrawed with tile %d\n", dapp->name,
- wmdock->propDispTile);
+ fprintf(fp, "wmdock: Dockapp %s redrawed with tile %d\n", dapp->name,
+ wmdock->propDispTile);
+ fflush(fp);
#endif
- gtk_widget_map (GTK_WIDGET(dapp->s));
+ gtk_widget_map (GTK_WIDGET(dapp->s));
- gtk_widget_show(GTK_WIDGET(dapp->s));
+ gtk_widget_show(GTK_WIDGET(dapp->s));
}
+DockappNode *wmdock_find_startup_dockapp(gchar *compCmd)
+{
+ GList *dapps;
+ DockappNode *dapp = NULL;
+
+ dapps = wmdock->dapps;
+
+ while(dapps) {
+ dapp = (DockappNode *) dapps->data;
+
+ if(dapp) {
+ if(!dapp->name && dapp->cmd) {
+ if(!g_strcasecmp(dapp->cmd, compCmd)) {
+#ifdef DEBUG
+ fprintf(fp, "found startup dockapp with cmd %s\n", compCmd);
+ fflush(fp);
+#endif
+ return(dapp);
+ }
+ }
+ }
+
+ dapps = g_list_next(dapps);
+ }
+
+ return(NULL);
+}
+
+
void wmdock_dapp_closed(GtkSocket *socket, DockappNode *dapp)
{
#ifdef DEBUG
- fprintf(fp, "- wmdock: closed window signal ! (xid: %u)\n", dapp->i);
+ fprintf(fp, "wmdock: closed window signal ! (xid: %u)\n", dapp->i);
+ fflush(fp);
#endif
- wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
- gtk_widget_destroy(GTK_WIDGET(dapp->s));
+ wmdock->dapps = g_list_remove_all(wmdock->dapps, dapp);
+ gtk_widget_destroy(GTK_WIDGET(dapp->s));
- g_free(dapp);
+ g_free(dapp);
- if(g_slist_length (wmdock->dapps) == 0) {
- gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
- xfce_panel_plugin_get_size (wmdock->plugin) - 2,
- xfce_panel_plugin_get_size (wmdock->plugin) - 2);
- if(wmdockIcon) gtk_widget_destroy(wmdockIcon);
- wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
- g_object_unref (G_OBJECT (gdkPbIcon));
+ if(g_list_length (wmdock->dapps) == 0) {
+ gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
+ xfce_panel_plugin_get_size (wmdock->plugin) - 2,
+ xfce_panel_plugin_get_size (wmdock->plugin) - 2);
+ if(wmdockIcon) gtk_widget_destroy(wmdockIcon);
+ wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
+ g_object_unref (G_OBJECT (gdkPbIcon));
- gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
- gtk_widget_show(GTK_WIDGET(wmdockIcon));
- }
+ gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
+ gtk_widget_show(GTK_WIDGET(wmdockIcon));
+ }
}
+gchar *wmdock_get_dockapp_cmd(WnckWindow *w)
+{
+ gchar *cmd = NULL;
+ int argc = 0;
+ char **argv;
+
+ XGetCommand(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+ wnck_window_get_xid(w), &argv, &argc);
+ if(argc > 0) {
+ argv = (char **) realloc(argv, sizeof(char *) * (argc + 1));
+ argv[argc] = NULL;
+ cmd = g_strjoinv (" ", argv);
+ XFreeStringList(argv);
+ } else {
+ cmd = g_strdup(wnck_window_get_name(w));
+ }
+
+ return(cmd);
+}
+
+
static void wmdock_window_open(WnckScreen *s, WnckWindow *w)
{
- int xp, yp, wi, he;
- XWMHints *h;
- DockappNode *dapp = NULL;
- int argc = 0;
- char **argv;
+ int wi, he;
+ XWMHints *h;
+ XWindowAttributes attr;
+ DockappNode *dapp = NULL;
+ gint rcstartupPos = 0;
+ guint listLen = 0;
+ gchar *cmd = NULL;
+ gboolean rcDapp = FALSE;
+
+ gdk_error_trap_push();
+ gdk_flush();
+
+ h = XGetWMHints(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+ wnck_window_get_xid(w));
+
+ if(!h) return;
+ /* || has_dockapp_hint(w) */
+ if(h->initial_state == WithdrawnState ||
+ h->flags == (WindowGroupHint | StateHint | IconWindowHint)) {
- gdk_error_trap_push();
- gdk_flush();
-
- h = XGetWMHints(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
- wnck_window_get_xid(w));
-
- if((h && h->initial_state==WithdrawnState) || has_dockapp_hint(w)) {
#ifdef DEBUG
- fprintf(fp, "- wmdock: new wmapp open\n");
+ fprintf(fp, "wmdock: new wmapp open\n");
+ fflush(fp);
#endif
- wnck_window_get_geometry(w,&xp,&yp,&wi,&he);
+ /* wnck_window_get_geometry(w,&xp,&yp,&wi,&he); */
#ifdef DEBUG
- fprintf(fp, "New dockapp %s with xid: %u pid: %u arrived\n", wnck_window_get_name(w), wnck_window_get_xid(w), wnck_window_get_pid(w));
+ fprintf(fp, "wmdock: New dockapp %s with xid:%u pid:%u arrived sessid:%s\n",
+ wnck_window_get_name(w), wnck_window_get_xid(w),
+ wnck_window_get_pid(w), wnck_window_get_session_id(w));
+ fflush(fp);
#endif
-
- if(wi > DEFAULT_DOCKAPP_WIDTH || he > DEFAULT_DOCKAPP_HEIGHT) {
- /* It seems to be no dockapp, because the width or the height of the
- * window a greater than 64 pixels. */
- XFree(h);
- return;
- }
-
- dapp = g_new0(DockappNode, 1);
-
- /* gtksocket = GTK_SOCKET(gtk_socket_new()); */
- dapp->s = GTK_SOCKET(gtk_socket_new());
- /* i = wnck_window_get_xid(w); */
- dapp->i = wnck_window_get_xid(w);
-
- gtk_widget_set_size_request(GTK_WIDGET(dapp->s), wi, he);
- wnck_window_set_skip_tasklist (w, TRUE);
- wnck_window_set_skip_pager (w, TRUE);
+ cmd = wmdock_get_dockapp_cmd(w);
+#ifdef DEBUG
+ fprintf(fp, "wmdock: found cmd %s for window %s\n",
+ cmd, wnck_window_get_name(w));
+ fflush(fp);
+#endif
- dapp->name = g_strdup(wnck_window_get_name(w));
+ if(!cmd) {
+ g_free(cmd);
+ XFree(h);
+ return;
+ }
- XGetCommand(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), dapp->i, &argv, &argc);
- if(argc > 0) {
- argv = (char **) realloc(argv, sizeof(char *) * (argc + 1));
- argv[argc] = NULL;
- dapp->cmd = g_strjoinv (" ", argv);
- } else {
- dapp->cmd = g_strdup(dapp->name);
- }
+ if(rcCmds && (dapp = wmdock_find_startup_dockapp(cmd)))
+ rcDapp = TRUE;
- if(wmdockIcon) {
- gtk_widget_destroy(wmdockIcon);
- wmdockIcon = NULL;
- }
+ if(rcDapp == FALSE) {
+#ifdef DEBUG
+ fprintf(fp, "wmdock: Create a new dapp window %s\n",
+ wnck_window_get_name(w));
+ fflush(fp);
+#endif
+ dapp = g_new0(DockappNode, 1);
+ dapp->s = GTK_SOCKET(gtk_socket_new());
+ }
- gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), FALSE, FALSE, 0);
+ if(h->initial_state == WithdrawnState && h->icon_window) {
+ XUnmapWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+ wnck_window_get_xid(w));
+ dapp->i =h->icon_window;
+
+ } else {
+ dapp->i = wnck_window_get_xid(w);
+ }
- gtk_socket_add_id(dapp->s, dapp->i);
+ if(!XGetWindowAttributes(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+ dapp->i, &attr)) {
+ wi = DEFAULT_DOCKAPP_WIDTH;
+ he = DEFAULT_DOCKAPP_HEIGHT;
+ } else {
+ wi = attr.width;
+ he = attr.height;
+ }
+
+ if(wi > DEFAULT_DOCKAPP_WIDTH || he > DEFAULT_DOCKAPP_HEIGHT) {
+ /* It seems to be no dockapp, because the width or the height of the
+ * window a greater than 64 pixels. */
+ gtk_widget_destroy(GTK_WIDGET(dapp->s));
+ g_free(cmd);
+ g_free(dapp);
+ XFree(h);
+ return;
+ }
+
+#ifdef DEBUG
+ fprintf(fp, "wmdock: New dockapp %s width: %d height: %d\n",
+ wnck_window_get_name(w), wi, he);
+ fflush(fp);
+#endif
+
+ gtk_widget_set_size_request(GTK_WIDGET(dapp->s), wi, he);
+
+ wnck_window_set_skip_tasklist (w, TRUE);
+ wnck_window_set_skip_pager (w, TRUE);
+
+ dapp->name = g_strdup(wnck_window_get_name(w));
+ dapp->cmd = cmd;
+
+ if(wmdockIcon) {
+ gtk_widget_destroy(wmdockIcon);
+ wmdockIcon = NULL;
+ }
+
+ if(rcDapp == FALSE)
+ gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), FALSE, FALSE,
+ 0);
+
+ gtk_socket_add_id(dapp->s, dapp->i);
- /* Tile in the background */
- if(wmdock->propDispTile == TRUE) {
- gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
- gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, gdkPmTile, FALSE);
- if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
- gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
- }
+ /* Tile in the background */
+ if(wmdock->propDispTile == TRUE) {
+ gtk_widget_set_app_paintable(GTK_WIDGET(dapp->s), TRUE);
+ gdk_window_set_back_pixmap(GTK_WIDGET(dapp->s)->window, gdkPmTile, FALSE);
+ if (GTK_WIDGET_FLAGS(GTK_WIDGET(dapp->s)) & GTK_MAPPED)
+ gtk_widget_queue_draw(GTK_WIDGET(dapp->s));
+ }
- gtk_widget_show(GTK_WIDGET(dapp->s));
+ gtk_widget_show(GTK_WIDGET(dapp->s));
- g_signal_connect(dapp->s, "plug-removed", G_CALLBACK(wmdock_dapp_closed), dapp);
- wmdock->dapps=g_slist_append(wmdock->dapps, dapp);
- }
+ g_signal_connect(dapp->s, "plug-removed", G_CALLBACK(wmdock_dapp_closed),
+ dapp);
- XFree(h);
+ if(rcDapp == FALSE)
+ wmdock->dapps=g_list_append(wmdock->dapps, dapp);
+ }
+
+ XFree(h);
}
static void wmdock_orientation_changed (XfcePanelPlugin *plugin, GtkOrientation orientation, gpointer user_data)
{
- /*
- if (xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_VERTICAL)
- gtk_alignment_set (GTK_ALIGNMENT (wmdock->box), 0.5, 0.5, 0.0, 1.0);
- else
- gtk_alignment_set (GTK_ALIGNMENT (wmdock->box), 0.5, 0.5, 1.0, 0.0);
- */
- xfce_hvbox_set_orientation ((XfceHVBox *) wmdock->box, orientation);
- gtk_widget_show(GTK_WIDGET(wmdock->box));
+ /*
+ if (xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_VERTICAL)
+ gtk_alignment_set (GTK_ALIGNMENT (wmdock->box), 0.5, 0.5, 0.0, 1.0);
+ else
+ gtk_alignment_set (GTK_ALIGNMENT (wmdock->box), 0.5, 0.5, 1.0, 0.0);
+ */
+ xfce_hvbox_set_orientation ((XfceHVBox *) wmdock->box, orientation);
+ gtk_widget_show(GTK_WIDGET(wmdock->box));
}
static gboolean wmdock_size_changed (XfcePanelPlugin *plugin, int size)
{
- if (xfce_panel_plugin_get_orientation (plugin) ==
- GTK_ORIENTATION_HORIZONTAL) {
- gtk_widget_set_size_request (GTK_WIDGET (plugin), -1, size);
- } else {
- gtk_widget_set_size_request (GTK_WIDGET (plugin), size, -1);
- }
+ if (xfce_panel_plugin_get_orientation (plugin) ==
+ GTK_ORIENTATION_HORIZONTAL) {
+ gtk_widget_set_size_request (GTK_WIDGET (plugin), -1, size);
+ } else {
+ gtk_widget_set_size_request (GTK_WIDGET (plugin), size, -1);
+ }
- if(wmdockIcon) {
- gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
- xfce_panel_plugin_get_size (plugin) - 2,
- xfce_panel_plugin_get_size (plugin) - 2);
- gtk_image_set_from_pixbuf (GTK_IMAGE(wmdockIcon), gdkPbIcon);
- g_object_unref (G_OBJECT (gdkPbIcon));
- gtk_widget_show(GTK_WIDGET(wmdockIcon));
- }
+ if(wmdockIcon) {
+ gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
+ xfce_panel_plugin_get_size (plugin) - 2,
+ xfce_panel_plugin_get_size (plugin) - 2);
+ gtk_image_set_from_pixbuf (GTK_IMAGE(wmdockIcon), gdkPbIcon);
+ g_object_unref (G_OBJECT (gdkPbIcon));
+ gtk_widget_show(GTK_WIDGET(wmdockIcon));
+ }
- return TRUE;
+ return TRUE;
}
gboolean wmdock_startup_dockapp(gchar *cmd)
{
- gboolean r;
- GError **err = NULL;
+ gboolean r;
+ GError **err = NULL;
- r = g_spawn_command_line_async(cmd, err);
+ r = g_spawn_command_line_async(cmd, err);
- /* Errors will be evaluate in a later version. */
- if(err) g_clear_error (err);
+ /* Errors will be evaluate in a later version. */
+ if(err) g_clear_error (err);
- return(r);
+ return(r);
}
static void wmdock_error_dialog_response (GtkWidget *gtkDlg, gint response)
{
- gtk_widget_destroy (gtkDlg);
+ gtk_widget_destroy (gtkDlg);
}
static void wmdock_read_rc_file (XfcePanelPlugin *plugin)
{
- gchar *file = NULL;
- XfceRc *rc;
- gint i;
- gchar **cmds = NULL;
- gint cmdcnt;
- GtkWidget *gtkDlg;
+ gchar *file = NULL;
+ XfceRc *rc = NULL;
+ gint i;
+ GtkWidget *gtkDlg;
+ DockappNode *dapp = NULL;
+
+ if (!(file = xfce_panel_plugin_lookup_rc_file (plugin))) return;
- if (!(file = xfce_panel_plugin_lookup_rc_file (plugin))) return;
-
- rc = xfce_rc_simple_open (file, TRUE);
- g_free(file);
+ rc = xfce_rc_simple_open (file, TRUE);
+ g_free(file);
- if(!rc) return;
+ if(!rc) return;
- cmds = xfce_rc_read_list_entry(rc, "cmds", ";");
- cmdcnt = xfce_rc_read_int_entry(rc, "cmdcnt", 0);
- wmdock->propDispTile = xfce_rc_read_bool_entry (rc, "disptile", TRUE);
+ rcCmds = xfce_rc_read_list_entry(rc, "cmds", ";");
+ rcCmdcnt = xfce_rc_read_int_entry(rc, "cmdcnt", 0);
+ wmdock->propDispTile = xfce_rc_read_bool_entry (rc, "disptile", TRUE);
- if(G_LIKELY(cmds != NULL)) {
- for (i = cmdcnt; i >= 0; i--) {
+ if(G_LIKELY(rcCmds != NULL)) {
+ for (i = 0; i <= rcCmdcnt; i++) {
+
#ifdef DEBUG
- fprintf(fp, "config will start: %s\n", cmds[i]);
+ fprintf(fp, "wmdock: config will start: %s\n", rcCmds[i]);
+ fflush(fp);
#endif
- if(!cmds[i]) continue;
- if(wmdock_startup_dockapp(cmds[i]) != TRUE) {
- gtkDlg = gtk_message_dialog_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- "Failed to start %s!",
- cmds[i]);
- g_signal_connect (gtkDlg, "response", G_CALLBACK (wmdock_error_dialog_response), NULL);
- gtk_widget_show_all (gtkDlg);
- }
- /* Sleep for n microseconds to startup dockapps in the right order. */
- g_usleep(250000);
- g_free(cmds[i]);
- }
+ if(!rcCmds[i]) continue;
+ if(wmdock_startup_dockapp(rcCmds[i]) != TRUE) {
+ gtkDlg = gtk_message_dialog_new(GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "Failed to start %s!",
+ rcCmds[i]);
+ g_signal_connect (gtkDlg, "response", G_CALLBACK (wmdock_error_dialog_response), NULL);
+ gtk_widget_show_all (gtkDlg);
+ } else {
+ /* Create some dummy widget entries to locate the right position on
+ window swallow up. */
- g_free(cmds);
- }
+ dapp = g_new0(DockappNode, 1);
+ dapp->name = NULL;
+ dapp->cmd = rcCmds[i];
+
+ dapp->s = GTK_SOCKET(gtk_socket_new());
+
+ gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), FALSE, FALSE,
+ 0);
+
+ wmdock->dapps=g_list_append(wmdock->dapps, dapp);
+ }
+
+ /* Sleep for n microseconds to startup dockapps in the right order. */
+ /* g_usleep(250000); */
+ }
+ }
- xfce_rc_close (rc);
+ xfce_rc_close (rc);
}
static void wmdock_write_rc_file (XfcePanelPlugin *plugin)
{
- gchar *file;
- XfceRc *rc;
- gchar **cmds;
- DockappNode *dapp = NULL;
- gint i;
+ gchar *file;
+ XfceRc *rc;
+ gchar **cmds;
+ DockappNode *dapp = NULL;
+ gint i;
- if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) return;
+ if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) return;
- rc = xfce_rc_simple_open (file, FALSE);
- g_free (file);
+ rc = xfce_rc_simple_open (file, FALSE);
+ g_free (file);
- if (!rc) return;
+ if (!rc) return;
- if(g_slist_length (wmdock->dapps) > 0) {
- cmds = g_malloc(sizeof (gchar *) * (g_slist_length (wmdock->dapps) + 1));
+ if(g_list_length (wmdock->dapps) > 0) {
+ cmds = g_malloc(sizeof (gchar *) * (g_list_length (wmdock->dapps) + 1));
- for(i = 0; i < g_slist_length(wmdock->dapps); i++) {
- dapp = g_slist_nth_data(wmdock->dapps, i);
- if(dapp) {
- cmds[i] = g_strdup(dapp->cmd);
- }
- }
- /* Workaround for a xfce bug in xfce_rc_read_list_entry */
- cmds[i] = NULL;
+ for(i = 0; i < g_list_length(wmdock->dapps); i++) {
+ dapp = g_list_nth_data(wmdock->dapps, i);
+ if(dapp) {
+ if(dapp->name && dapp->cmd)
+ cmds[i] = g_strdup(dapp->cmd);
+ }
+ }
+ /* Workaround for a xfce bug in xfce_rc_read_list_entry */
+ cmds[i] = NULL;
- xfce_rc_write_list_entry(rc, "cmds", cmds, ";");
+ xfce_rc_write_list_entry(rc, "cmds", cmds, ";");
- g_strfreev(cmds);
+ g_strfreev(cmds);
- xfce_rc_write_int_entry (rc, "cmdcnt", g_slist_length (wmdock->dapps));
- xfce_rc_write_bool_entry (rc, "disptile", wmdock->propDispTile);
- }
+ xfce_rc_write_int_entry (rc, "cmdcnt", g_list_length (wmdock->dapps));
+ xfce_rc_write_bool_entry (rc, "disptile", wmdock->propDispTile);
+ }
- xfce_rc_close(rc);
+ xfce_rc_close(rc);
}
static void wmdock_free_data(XfcePanelPlugin *plugin)
{
- g_slist_foreach(wmdock->dapps, (GFunc)wmdock_destroy_dockapp, NULL);
- gtk_widget_destroy(GTK_WIDGET(wmdock->box));
- g_slist_free(wmdock->dapps);
- g_free(wmdock);
+ g_list_foreach(wmdock->dapps, (GFunc)wmdock_destroy_dockapp, NULL);
+ gtk_widget_destroy(GTK_WIDGET(wmdock->box));
+ g_list_free(wmdock->dapps);
+ g_free(wmdock);
- g_free(wmdock);
#ifdef DEBUG
- fclose(fp);
+ fclose(fp);
#endif
}
@@ -414,302 +541,317 @@
void wmdock_fill_cmbx(DockappNode *dapp, GtkWidget *gtkComboBox)
{
- if(gtkComboBox) {
+ if(gtkComboBox) {
#ifdef DEBUG
- fprintf(fp, "%s append to list\n", dapp->name);
+ fprintf(fp, "wmdock: %s append to list\n", dapp->name);
+ fflush(fp);
#endif
- gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox), dapp->name);
- }
+ gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox), dapp->name);
+ }
}
void wmdock_rebuild_fromlist ()
{
- if(g_slist_length(wmdock->dapps) > 0) {
+ if(g_list_length(wmdock->dapps) > 0) {
- }
+ }
}
void wmdock_properties_chkdisptile(GtkToggleButton *gtkChkDispTile, gpointer user_data)
{
- wmdock->propDispTile = gtk_toggle_button_get_active(gtkChkDispTile);
+ wmdock->propDispTile = gtk_toggle_button_get_active(gtkChkDispTile);
- g_slist_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
- gtk_widget_show_all(GTK_WIDGET(wmdock->box));
+ g_list_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
+ gtk_widget_show_all(GTK_WIDGET(wmdock->box));
}
void wmdock_properties_moveup (GtkWidget *gtkBtnMoveUp, GtkWidget *gtkComboBox)
{
- DockappNode *dapp = NULL;
- gint pos;
+ DockappNode *dapp = NULL;
+ gint pos;
- pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
+ pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
- if(g_slist_length(wmdock->dapps) > 1 && pos > 0) {
- dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
+ if(g_list_length(wmdock->dapps) > 1 && pos > 0) {
+ dapp = (DockappNode *) g_list_nth_data(wmdock->dapps, pos);
- if(dapp) {
- wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
- wmdock->dapps = g_slist_insert(wmdock->dapps, dapp, pos - 1);
- gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
- gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos - 1, dapp->name);
- gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos - 1);
- gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos - 1);
+ if(dapp) {
+ wmdock->dapps = g_list_remove_all(wmdock->dapps, dapp);
+ wmdock->dapps = g_list_insert(wmdock->dapps, dapp, pos - 1);
+ gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
+ gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos - 1, dapp->name);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos - 1);
+ gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos - 1);
- g_slist_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
- }
- }
+ g_list_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
+ }
+ }
}
void wmdock_properties_movedown (GtkWidget *gtkBtnMoveDown, GtkWidget *gtkComboBox)
{
- DockappNode *dapp = NULL;
- gint pos;
+ DockappNode *dapp = NULL;
+ gint pos;
- pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
+ pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
- if(g_slist_length(wmdock->dapps) > 1 && pos < g_slist_length(wmdock->dapps) - 1) {
- dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
+ if(g_list_length(wmdock->dapps) > 1 && pos < g_list_length(wmdock->dapps) - 1) {
+ dapp = (DockappNode *) g_list_nth_data(wmdock->dapps, pos);
- if(dapp) {
- wmdock->dapps = g_slist_remove_all(wmdock->dapps, dapp);
- wmdock->dapps = g_slist_insert(wmdock->dapps, dapp, pos + 1);
- gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
- gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos + 1, dapp->name);
- gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos + 1);
- gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos + 1);
+ if(dapp) {
+ wmdock->dapps = g_list_remove_all(wmdock->dapps, dapp);
+ wmdock->dapps = g_list_insert(wmdock->dapps, dapp, pos + 1);
+ gtk_combo_box_remove_text(GTK_COMBO_BOX(gtkComboBox), pos);
+ gtk_combo_box_insert_text(GTK_COMBO_BOX(gtkComboBox), pos + 1, dapp->name);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), pos + 1);
+ gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), pos + 1);
- g_slist_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
- }
- }
+ g_list_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
+ }
+ }
}
void wmdock_properties_savecmd (GtkWidget *gtkTxtCmd, GdkEventKey *event, GtkWidget *gtkComboBox)
{
- DockappNode *dapp = NULL;
- gint pos;
+ DockappNode *dapp = NULL;
+ gint pos;
- pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
+ pos = gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox));
- dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, pos);
- if(dapp) {
- g_free(dapp->cmd);
- dapp->cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtkTxtCmd)));
- }
+ dapp = (DockappNode *) g_list_nth_data(wmdock->dapps, pos);
+ if(dapp) {
+ g_free(dapp->cmd);
+ dapp->cmd = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtkTxtCmd)));
+ }
}
void wmdock_properties_changed (GtkWidget *gtkComboBox, GtkWidget *gtkTxtCmd)
{
- DockappNode *dapp = NULL;
+ DockappNode *dapp = NULL;
- dapp = (DockappNode *) g_slist_nth_data(wmdock->dapps, gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox)));
- if(dapp) {
+ dapp = (DockappNode *) g_list_nth_data(wmdock->dapps, gtk_combo_box_get_active(GTK_COMBO_BOX(gtkComboBox)));
+ if(dapp) {
#ifdef DEBUG
- fprintf(fp, "changed, %s selected:\n", dapp->name);
+ fprintf(fp, "wmdock: changed, %s selected:\n", dapp->name);
+ fflush(fp);
#endif
- gtk_entry_set_text(GTK_ENTRY(gtkTxtCmd), dapp->cmd);
- }
+ gtk_entry_set_text(GTK_ENTRY(gtkTxtCmd), dapp->cmd);
+ }
}
static void wmdock_properties_dialog_response (GtkWidget *gtkDlg, gint response)
{
- xfce_panel_plugin_unblock_menu (wmdock->plugin);
+ xfce_panel_plugin_unblock_menu (wmdock->plugin);
- gtk_widget_destroy (gtkDlg);
+ gtk_widget_destroy (gtkDlg);
}
static void wmdock_properties_dialog(XfcePanelPlugin *plugin)
{
- GtkWidget *gtkDlg, *gtkVbox, *gtkVbox2, *gtkVboxGeneral, *gtkHbox,
- *gtkLblSel, *gtkLblCmd, *gtkLblGeneral, *gtkChkDispTile,
- *gtkTxtCmd, *gtkComboBox, *gtkImage, *gtkBtnMoveUp, *gtkBtnMoveDown;
+ GtkWidget *gtkDlg, *gtkVbox, *gtkVbox2, *gtkVboxGeneral, *gtkHbox,
+ *gtkLblSel, *gtkLblCmd, *gtkLblGeneral, *gtkChkDispTile,
+ *gtkTxtCmd, *gtkComboBox, *gtkImage, *gtkBtnMoveUp, *gtkBtnMoveDown;
- xfce_panel_plugin_block_menu (plugin);
+ xfce_panel_plugin_block_menu (plugin);
- gtkDlg = xfce_titled_dialog_new_with_buttons (_("WMdock"),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
- GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
- GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
- NULL);
+ /* Create the configure dialog. */
+ gtkDlg = xfce_titled_dialog_new_with_buttons (_("WMdock"),
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+ GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
+ NULL);
- gtk_window_set_position (GTK_WINDOW (gtkDlg), GTK_WIN_POS_CENTER);
- gtk_window_set_icon_name (GTK_WINDOW (gtkDlg), "xfce4-settings");
+ gtk_window_set_position (GTK_WINDOW (gtkDlg), GTK_WIN_POS_CENTER);
+ gtk_window_set_icon_name (GTK_WINDOW (gtkDlg), "xfce4-settings");
- g_signal_connect (gtkDlg, "response",
- G_CALLBACK (wmdock_properties_dialog_response),
- NULL);
+ g_signal_connect (gtkDlg, "response",
+ G_CALLBACK (wmdock_properties_dialog_response),
+ NULL);
- gtkHbox = gtk_hbox_new(FALSE, 6);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (gtkDlg)->vbox), gtkHbox, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (gtkHbox), 4);
+ /* Create the layout containers. */
+ gtkHbox = gtk_hbox_new(FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (gtkDlg)->vbox), gtkHbox, FALSE, FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (gtkHbox), 4);
- gtkVboxGeneral = gtk_vbox_new(FALSE, 6);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (gtkDlg)->vbox), gtkVboxGeneral, FALSE, FALSE, 0);
- gtk_container_set_border_width (GTK_CONTAINER (gtkVboxGeneral), 4);
+ gtkVboxGeneral = gtk_vbox_new(FALSE, 6);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (gtkDlg)->vbox), gtkVboxGeneral, FALSE, FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (gtkVboxGeneral), 4);
- gtkVbox = gtk_vbox_new(FALSE, 4);
- gtkVbox2 = gtk_vbox_new(FALSE, 4);
- gtk_container_set_border_width (GTK_CONTAINER (gtkVbox), 2);
- gtk_container_set_border_width (GTK_CONTAINER (gtkVbox2), 2);
- gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox2, FALSE, FALSE, 0);
+ gtkVbox = gtk_vbox_new(FALSE, 4);
+ gtkVbox2 = gtk_vbox_new(FALSE, 4);
+ gtk_container_set_border_width (GTK_CONTAINER (gtkVbox), 2);
+ gtk_container_set_border_width (GTK_CONTAINER (gtkVbox2), 2);
+ gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (gtkHbox), gtkVbox2, FALSE, FALSE, 0);
- gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
- DEFAULT_DOCKAPP_HEIGHT, DEFAULT_DOCKAPP_WIDTH);
- gtkImage = gtk_image_new_from_pixbuf (gdkPbIcon);
- g_object_unref (G_OBJECT (gdkPbIcon));
+ gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
+ DEFAULT_DOCKAPP_HEIGHT,
+ DEFAULT_DOCKAPP_WIDTH);
+ gtkImage = gtk_image_new_from_pixbuf (gdkPbIcon);
+ g_object_unref (G_OBJECT (gdkPbIcon));
- gtk_widget_set_name(gtkImage, "image");
- gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkImage), FALSE, FALSE, 0);
+ gtk_widget_set_name(gtkImage, "image");
+ gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkImage), FALSE, FALSE, 0);
- gtkBtnMoveUp = xfce_arrow_button_new (GTK_ARROW_UP);
- gtkBtnMoveDown = xfce_arrow_button_new (GTK_ARROW_DOWN);
- gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveUp), FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveDown), FALSE, FALSE, 0);
+ gtkBtnMoveUp = xfce_arrow_button_new (GTK_ARROW_UP);
+ gtkBtnMoveDown = xfce_arrow_button_new (GTK_ARROW_DOWN);
+ gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveUp), FALSE,
+ FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(gtkVbox), GTK_WIDGET (gtkBtnMoveDown), FALSE,
+ FALSE, 0);
- gtkLblSel = gtk_label_new ("Select dockapp to configure:");
- gtk_misc_set_alignment (GTK_MISC (gtkLblSel), 0, 0);
- gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkLblSel, FALSE, FALSE, 0);
+ gtkLblSel = gtk_label_new ("Select dockapp to configure:");
+ gtk_misc_set_alignment (GTK_MISC (gtkLblSel), 0, 0);
+ gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkLblSel, FALSE, FALSE, 0);
- gtkComboBox = gtk_combo_box_new_text();
+ gtkComboBox = gtk_combo_box_new_text();
- if(g_slist_length(wmdock->dapps) > 0) {
- g_slist_foreach(wmdock->dapps, (GFunc) wmdock_fill_cmbx, gtkComboBox);
- } else {
+ if(g_list_length(wmdock->dapps) > 0) {
+ g_list_foreach(wmdock->dapps, (GFunc) wmdock_fill_cmbx, gtkComboBox);
+ } else {
#ifdef DEBUG
- fprintf(fp, "draw icon in properties\n");
+ fprintf(fp, "wmdock: Draw icon in properties\n");
+ fflush(fp);
#endif
- gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox), "No dockapp are running!");
- }
- gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), 0);
+ gtk_combo_box_append_text (GTK_COMBO_BOX(gtkComboBox),
+ "No dockapp are running!");
+ }
+ gtk_combo_box_set_active(GTK_COMBO_BOX(gtkComboBox), 0);
- gtk_box_pack_start (GTK_BOX (gtkVbox2), gtkComboBox, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (gtkVbox2), gtkComboBox, FALSE, TRUE, 0);
- gtkLblCmd = gtk_label_new ("Shell command:");
- gtk_misc_set_alignment (GTK_MISC (gtkLblCmd), 0, 0);
- gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkLblCmd, FALSE, FALSE, 0);
- gtkTxtCmd = gtk_entry_new();
- if(g_slist_length(wmdock->dapps) > 0) {
- gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), TRUE);
- } else {
- gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), FALSE);
- }
- gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkTxtCmd, FALSE, FALSE, 0);
+ gtkLblCmd = gtk_label_new ("Shell command:");
+ gtk_misc_set_alignment (GTK_MISC (gtkLblCmd), 0, 0);
+ gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkLblCmd, FALSE, FALSE, 0);
+ gtkTxtCmd = gtk_entry_new();
+ if(g_list_length(wmdock->dapps) > 0) {
+ gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), TRUE);
+ } else {
+ gtk_editable_set_editable(GTK_EDITABLE(gtkTxtCmd), FALSE);
+ }
+ gtk_box_pack_start (GTK_BOX(gtkVbox2), gtkTxtCmd, FALSE, FALSE, 0);
- gtkLblGeneral = gtk_label_new ("General settings:");
- gtk_misc_set_alignment (GTK_MISC (gtkLblGeneral), 0, 0);
- gtkChkDispTile = gtk_check_button_new_with_label("Display tile in the background");
- gtk_toggle_button_set_active((GtkToggleButton *) gtkChkDispTile, wmdock->propDispTile);
- gtk_misc_set_alignment (GTK_MISC (gtkChkDispTile), 0, 0);
- gtk_box_pack_start (GTK_BOX(gtkVboxGeneral), gtkLblGeneral, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(gtkVboxGeneral), gtkChkDispTile, FALSE, FALSE, 0);
+ gtkLblGeneral = gtk_label_new ("General settings:");
+ gtk_misc_set_alignment (GTK_MISC (gtkLblGeneral), 0, 0);
+ gtkChkDispTile = gtk_check_button_new_with_label("Display tile in the background");
+ gtk_toggle_button_set_active((GtkToggleButton *) gtkChkDispTile,
+ wmdock->propDispTile);
+ gtk_misc_set_alignment (GTK_MISC (gtkChkDispTile), 0, 0);
+ gtk_box_pack_start (GTK_BOX(gtkVboxGeneral), gtkLblGeneral, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(gtkVboxGeneral), gtkChkDispTile, FALSE, FALSE, 0);
- g_signal_connect(G_OBJECT(gtkComboBox), "changed", G_CALLBACK(wmdock_properties_changed), gtkTxtCmd);
- g_signal_connect(G_OBJECT(gtkTxtCmd), "key-release-event", G_CALLBACK(wmdock_properties_savecmd), gtkComboBox);
- g_signal_connect(G_OBJECT(gtkBtnMoveUp), "pressed", G_CALLBACK(wmdock_properties_moveup), gtkComboBox);
- g_signal_connect(G_OBJECT(gtkBtnMoveDown), "pressed", G_CALLBACK(wmdock_properties_movedown), gtkComboBox);
- g_signal_connect(G_OBJECT(gtkChkDispTile), "toggled", G_CALLBACK(wmdock_properties_chkdisptile), NULL);
+ /* Connect some signals to the dialog widgets */
+ g_signal_connect(G_OBJECT(gtkComboBox), "changed", G_CALLBACK(wmdock_properties_changed), gtkTxtCmd);
+ g_signal_connect(G_OBJECT(gtkTxtCmd), "key-release-event", G_CALLBACK(wmdock_properties_savecmd), gtkComboBox);
+ g_signal_connect(G_OBJECT(gtkBtnMoveUp), "pressed",
+ G_CALLBACK(wmdock_properties_moveup), gtkComboBox);
+ g_signal_connect(G_OBJECT(gtkBtnMoveDown), "pressed",
+ G_CALLBACK(wmdock_properties_movedown), gtkComboBox);
+ g_signal_connect(G_OBJECT(gtkChkDispTile), "toggled",
+ G_CALLBACK(wmdock_properties_chkdisptile), NULL);
- if(g_slist_length(wmdock->dapps) > 0) {
- wmdock_properties_changed(gtkComboBox, gtkTxtCmd);
- }
+ if(g_list_length(wmdock->dapps) > 0) {
+ wmdock_properties_changed(gtkComboBox, gtkTxtCmd);
+ }
- gtk_widget_show_all (gtkDlg);
+ gtk_widget_show_all (gtkDlg);
}
static WmdockPlugin *wmdock_plugin_new (XfcePanelPlugin* plugin)
{
- wmdock = g_new0(WmdockPlugin, 1);
+ wmdock = g_new0(WmdockPlugin, 1);
- wmdock->plugin = plugin;
- wmdock->dapps = NULL;
- wmdock->propDispTile = TRUE;
+ wmdock->plugin = plugin;
+ wmdock->dapps = NULL;
+ wmdock->propDispTile = TRUE;
- wmdock->ebox = gtk_event_box_new ();
- gtk_widget_show(GTK_WIDGET(wmdock->ebox));
+ wmdock->ebox = gtk_event_box_new ();
+ gtk_widget_show(GTK_WIDGET(wmdock->ebox));
- wmdock->align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+ wmdock->align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
- gtk_widget_show(GTK_WIDGET(wmdock->align));
+ gtk_widget_show(GTK_WIDGET(wmdock->align));
- gtk_container_add(GTK_CONTAINER(wmdock->ebox), GTK_WIDGET(wmdock->align));
+ gtk_container_add(GTK_CONTAINER(wmdock->ebox), GTK_WIDGET(wmdock->align));
- /*
- if(xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_VERTICAL) {
- wmdock->box = gtk_vbox_new(FALSE, 0);
- } else {
- wmdock->box = gtk_hbox_new(FALSE, 0);
- }
- */
- wmdock->box = xfce_hvbox_new(xfce_panel_plugin_get_orientation (plugin), FALSE, 0);
+ /*
+ if(xfce_panel_plugin_get_orientation (plugin) == GTK_ORIENTATION_VERTICAL) {
+ wmdock->box = gtk_vbox_new(FALSE, 0);
+ } else {
+ wmdock->box = gtk_hbox_new(FALSE, 0);
+ }
+ */
+ wmdock->box = xfce_hvbox_new(xfce_panel_plugin_get_orientation (plugin), FALSE, 0);
- gtk_container_add (GTK_CONTAINER (wmdock->align), wmdock->box);
+ gtk_container_add (GTK_CONTAINER (wmdock->align), wmdock->box);
- return wmdock;
+ return wmdock;
}
static void wmdock_construct (XfcePanelPlugin *plugin)
{
- WnckScreen *s;
+ WnckScreen *s;
#ifdef DEBUG
- fp = fopen("/tmp/xfce4-wmdock-debug.out", "w");
+ char debugFile[BUF_MAX];
+ sprintf(debugFile, "%s/wmdock-debug.%d", g_get_tmp_dir(), getpid());
+ fp = fopen(debugFile, "w");
+ if(!fp) fp = stderr;
#endif
- s = wnck_screen_get(0);
+ s = wnck_screen_get(0);
- xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+ xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
- DockAppAtom=XInternAtom(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
- "_XFCE4_DOCKAPP",False);
-
- wmdock = wmdock_plugin_new (plugin);
+ XfceDockAppAtom=XInternAtom(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()),
+ "_XFCE4_DOCKAPP",False);
+
+ wmdock = wmdock_plugin_new (plugin);
- gtk_widget_show(GTK_WIDGET(wmdock->box));
+ gtk_widget_show(GTK_WIDGET(wmdock->box));
- g_signal_connect(s, "window_opened", G_CALLBACK(wmdock_window_open), NULL);
- g_signal_connect (plugin, "size-changed", G_CALLBACK (wmdock_size_changed), NULL);
- g_signal_connect (plugin, "orientation-changed", G_CALLBACK (wmdock_orientation_changed), NULL);
- g_signal_connect (plugin, "free-data", G_CALLBACK (wmdock_free_data), NULL);
+ g_signal_connect(s, "window_opened", G_CALLBACK(wmdock_window_open), NULL);
+ g_signal_connect (plugin, "size-changed", G_CALLBACK (wmdock_size_changed), NULL);
+ g_signal_connect (plugin, "orientation-changed", G_CALLBACK (wmdock_orientation_changed), NULL);
+ g_signal_connect (plugin, "free-data", G_CALLBACK (wmdock_free_data), NULL);
- gtk_container_add (GTK_CONTAINER (plugin), wmdock->ebox);
+ gtk_container_add (GTK_CONTAINER (plugin), wmdock->ebox);
- xfce_panel_plugin_add_action_widget (plugin, wmdock->ebox);
- xfce_panel_plugin_set_expand(plugin, TRUE);
+ xfce_panel_plugin_add_action_widget (plugin, wmdock->ebox);
+ xfce_panel_plugin_set_expand(plugin, TRUE);
- /* Setup the tile image */
- gtkStyTile = gtk_widget_get_default_style();
- gdkPmTile = gdk_pixmap_create_from_xpm_d (wmdock->ebox->window, &gdkBmTile,
- >kStyTile->bg[GTK_STATE_NORMAL],
- tile_xpm);
+ /* Setup the tile image */
+ gdkPmTile = gdk_pixmap_create_from_xpm_d (wmdock->ebox->window, &gdkBmTile,
+ NULL, tile_xpm);
- gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
- xfce_panel_plugin_get_size (plugin) - 2,
- xfce_panel_plugin_get_size (plugin) - 2);
- wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
- g_object_unref (G_OBJECT (gdkPbIcon));
+ gdkPbIcon = get_icon_from_xpm_scaled((const char **) xfce4_wmdock_plugin_xpm,
+ xfce_panel_plugin_get_size (plugin) - 2,
+ xfce_panel_plugin_get_size (plugin) - 2);
+ wmdockIcon = gtk_image_new_from_pixbuf (gdkPbIcon);
+ g_object_unref (G_OBJECT (gdkPbIcon));
- gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
- gtk_widget_show(GTK_WIDGET(wmdockIcon));
+ gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(wmdockIcon), FALSE, FALSE, 0);
+ gtk_widget_show(GTK_WIDGET(wmdockIcon));
- /* Configure plugin dialog */
- xfce_panel_plugin_menu_show_configure (plugin);
- g_signal_connect (plugin, "configure-plugin", G_CALLBACK (wmdock_properties_dialog), NULL);
-
- /* Read the config file and start the dockapps */
- wmdock_read_rc_file(plugin);
-
- g_signal_connect (plugin, "save", G_CALLBACK (wmdock_write_rc_file), NULL);
+ /* Configure plugin dialog */
+ xfce_panel_plugin_menu_show_configure (plugin);
+ g_signal_connect (plugin, "configure-plugin", G_CALLBACK (wmdock_properties_dialog), NULL);
+
+ /* Read the config file and start the dockapps */
+ wmdock_read_rc_file(plugin);
+
+ g_signal_connect (plugin, "save", G_CALLBACK (wmdock_write_rc_file), NULL);
}
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (wmdock_construct);
Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h 2008-02-05 08:41:17 UTC (rev 3917)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h 2008-02-06 21:23:25 UTC (rev 3918)
@@ -1,5 +1,3 @@
-
-
#ifndef __WMDOCK_H__
#define __WMDOCK_H__
@@ -10,25 +8,25 @@
#include <libwnck/libwnck.h>
typedef struct _dockapp {
- WnckWindow *w;
- GtkSocket *s;
- GdkNativeWindow i;
- gchar *name;
- gchar *cmd;
+ WnckWindow *w;
+ GtkSocket *s;
+ GdkNativeWindow i;
+ gchar *name;
+ gchar *cmd;
} DockappNode;
typedef struct {
- XfcePanelPlugin *plugin;
+ XfcePanelPlugin *plugin;
- GtkWidget *ebox;
+ GtkWidget *ebox;
- /* Plugin specific definitions */
- GtkWidget *align;
- GtkWidget *box;
+ /* Plugin specific definitions */
+ GtkWidget *align;
+ GtkWidget *box;
- gboolean propDispTile;
+ gboolean propDispTile;
- GSList *dapps;
+ GList *dapps;
} WmdockPlugin;
#endif /* __WMDOCK_H__ */
More information about the Goodies-commits
mailing list