[Goodies-commits] r5293 - xfce4-wmdock-plugin/trunk/panel-plugin

Andre Ellguth ellguth at xfce.org
Sun Aug 24 13:55:48 CEST 2008


Author: ellguth
Date: 2008-08-24 11:55:48 +0000 (Sun, 24 Aug 2008)
New Revision: 5293

Modified:
   xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
   xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
Log:
* Added a new option which will only add dockapps which start with wm* in the name.
* Added a remove dockapp button.


Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c	2008-08-23 14:54:14 UTC (rev 5292)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.c	2008-08-24 11:55:48 UTC (rev 5293)
@@ -51,10 +51,11 @@
 /* Properties dialog */
 static struct {
  GtkWidget *dlg;
- GtkWidget *vbox, *vbox2, *vboxGeneral;
+ GtkWidget *vbox, *vbox2, *vboxGeneral, *vboxDetect;
  GtkWidget *hbox;
- GtkWidget *lblSel, *lblCmd, *lblGeneral;
- GtkWidget *chkDispTile, *chkPropButton;
+ GtkWidget *frmGeneral, *frmDetect;
+ GtkWidget *lblSel, *lblCmd;
+ GtkWidget *chkDispTile, *chkPropButton, *chkAddOnlyWM;
  GtkWidget *imageContainer, *container;
  GtkWidget *imageTile, *image;
  GtkWidget *txtCmd;
@@ -285,7 +286,7 @@
   
   if(dapp) {
    if(!dapp->name && dapp->cmd) {
-    if(!g_strcasecmp(dapp->cmd, compCmd)) {
+    if(!g_ascii_strcasecmp(dapp->cmd, compCmd)) {
 #ifdef DEBUG
      fprintf(fp, "found startup dockapp with cmd %s\n", compCmd);
      fflush(fp);
@@ -418,7 +419,7 @@
 		 wnck_window_get_xid(w));
 
  if(!h) return;
-	
+
  if(h->initial_state == WithdrawnState || 
     h->flags == (WindowGroupHint | StateHint | IconWindowHint)
     || has_dockapp_hint(w)) {
@@ -428,7 +429,7 @@
   fflush(fp);
 #endif
 
-  /* wnck_window_get_geometry(w,&xp,&yp,&wi,&he); */
+
 #ifdef DEBUG
   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), 
@@ -436,6 +437,12 @@
   fflush(fp);
 #endif
 
+  if(wmdock->propDispAddOnlyWM == TRUE && 
+     g_str_has_prefix (wnck_window_get_name(w), "wm") == FALSE) {
+   XFree(h);
+   return;
+  }
+
   cmd = wmdock_get_dockapp_cmd(w);
 
   if(!cmd) {
@@ -483,6 +490,8 @@
   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. */
+   XMapWindow(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), 
+	      wnck_window_get_xid(w));
    gtk_widget_destroy(GTK_WIDGET(dapp->s));
    g_free(cmd);
    g_free(dapp);
@@ -512,10 +521,11 @@
    wmdockIcon = NULL;
   }
 
-  dapp->tile = wmdock_create_tile_from_socket(dapp);
+  if(rcDapp == FALSE) {
+   dapp->tile = wmdock_create_tile_from_socket(dapp);
 
-  if(rcDapp == FALSE)
    gtk_box_pack_start(GTK_BOX(wmdock->box), dapp->tile, FALSE, FALSE, 0);
+  }
 
   gtk_socket_add_id(dapp->s, dapp->i);
 		
@@ -608,8 +618,10 @@
  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);
- wmdock->propDispPropButton = xfce_rc_read_bool_entry (rc, "disppropbtn", TRUE);
+ wmdock->propDispPropButton = xfce_rc_read_bool_entry (rc, "disppropbtn", FALSE);
+ wmdock->propDispAddOnlyWM = xfce_rc_read_bool_entry (rc, "dispaddonlywm", TRUE);
 
+
  if(G_LIKELY(rcCmds != NULL)) {
   for (i = 0; i <= rcCmdcnt; i++) {
 			
@@ -637,9 +649,10 @@
     dapp->cmd = rcCmds[i];
 
     dapp->s = GTK_SOCKET(gtk_socket_new());
+    dapp->tile = wmdock_create_tile_from_socket(dapp);
 
-    gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->s), FALSE, FALSE, 
-		       0);
+    gtk_box_pack_start(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->tile),
+		       FALSE, FALSE, 0);
 
     wmdock->dapps=g_list_append(wmdock->dapps, dapp);    
    }
@@ -711,6 +724,7 @@
   xfce_rc_write_int_entry (rc, "cmdcnt", g_list_length (wmdock->dapps));
   xfce_rc_write_bool_entry (rc, "disptile", wmdock->propDispTile); 
   xfce_rc_write_bool_entry (rc, "disppropbtn", wmdock->propDispPropButton); 
+  xfce_rc_write_bool_entry (rc, "dispaddonlywm", wmdock->propDispAddOnlyWM); 
  }
 
  xfce_rc_close(rc);
@@ -742,6 +756,12 @@
 }
 
 
+static void wmdock_properties_chkaddonlywm(GtkToggleButton *gtkChkAddOnlyWM, gpointer user_data)
+{
+ wmdock->propDispAddOnlyWM = gtk_toggle_button_get_active(gtkChkAddOnlyWM);
+}
+
+
 static gboolean wmdock_properties_refresh_dapp_icon()
 {
  GdkPixmap *pm = NULL;
@@ -813,7 +833,7 @@
    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);
+   gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->tile), pos - 1);
 
    g_list_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
   }
@@ -837,7 +857,7 @@
    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);
+   gtk_box_reorder_child(GTK_BOX(wmdock->box), GTK_WIDGET(dapp->tile), pos + 1);
 
    g_list_foreach(wmdock->dapps, (GFunc)wmdock_redraw_dockapp, NULL);
   }		
@@ -862,17 +882,34 @@
 
 static void wmdock_properties_dialog_response (GtkWidget  *gtkDlg, gint response)
 {
+ DockappNode *dapp = NULL;
+ gint pos;
+
  if(!gtkDlg) return;
 
- xfce_panel_plugin_unblock_menu (wmdock->plugin);
- gtk_widget_destroy (gtkDlg);
+ switch(response) {
+ case GTK_RESPONSE_NO: /* Remove dockapp */
+  if(g_list_length(wmdock->dapps) > 0 && prop.cbx) {
+   pos = gtk_combo_box_get_active(GTK_COMBO_BOX(prop.cbx));
 
+   dapp = (DockappNode *) g_list_nth_data(wmdock->dapps, pos);
+   if(dapp)
+    wmdock_destroy_dockapp(dapp);
+  }
+  break;
+  
+ default:
+  xfce_panel_plugin_unblock_menu (wmdock->plugin);
+  gtk_widget_destroy (gtkDlg);
+
 #ifdef DEBUG
- fprintf(fp, "wmdock: properties dlg closed\n");
- fflush(fp);
+  fprintf(fp, "wmdock: properties dlg closed\n");
+  fflush(fp);
 #endif
 
- prop.dlg = prop.cbx = prop.txtCmd = prop.image = NULL;
+  prop.dlg = prop.cbx = prop.txtCmd = prop.image = NULL;
+  break;
+ }
 }
 
 
@@ -892,6 +929,7 @@
  prop.dlg = 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,
+						 _("Remove dockapp"), GTK_RESPONSE_NO,
 						 GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
 						 NULL);
 
@@ -906,10 +944,18 @@
  prop.hbox = gtk_hbox_new(FALSE, 6);
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), prop.hbox, FALSE, FALSE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (prop.hbox), 4);
-	
+
+ prop.frmGeneral = gtk_frame_new(_("General settings"));
+ prop.frmDetect = gtk_frame_new(_("Dockapp detection"));	
  prop.vboxGeneral = gtk_vbox_new(FALSE, 6);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), prop.vboxGeneral, FALSE, FALSE, 0);
+ prop.vboxDetect = gtk_vbox_new(FALSE, 6);
+
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), prop.frmGeneral,
+		     FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (prop.dlg)->vbox), prop.frmDetect,
+		     FALSE, FALSE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (prop.vboxGeneral), 4);	
+ gtk_container_set_border_width (GTK_CONTAINER (prop.vboxDetect), 4);	
 
  prop.vbox = gtk_vbox_new(FALSE, 4);
  prop.vbox2 = gtk_vbox_new(FALSE, 4);
@@ -918,6 +964,7 @@
  gtk_box_pack_start (GTK_BOX (prop.hbox), prop.vbox, FALSE, FALSE, 0);
  gtk_box_pack_start (GTK_BOX (prop.hbox), prop.vbox2, FALSE, FALSE, 0);
 
+
  prop.imageContainer = gtk_alignment_new(0.5, 0.5, 0, 0);
  gtk_widget_set_size_request(GTK_WIDGET(prop.imageContainer),
 			     DEFAULT_DOCKAPP_WIDTH,
@@ -967,19 +1014,27 @@
  }
  gtk_box_pack_start (GTK_BOX(prop.vbox2), prop.txtCmd, FALSE, FALSE, 0);
 	
- prop.lblGeneral = gtk_label_new (_("General settings:"));
- gtk_misc_set_alignment (GTK_MISC (prop.lblGeneral), 0, 0);
  prop.chkDispTile = gtk_check_button_new_with_label(_("Display tile in the background."));
  prop.chkPropButton = gtk_check_button_new_with_label(_("Display a separate WMdock properties\nbutton in the panel."));
+ prop.chkAddOnlyWM = gtk_check_button_new_with_label(_("Add only dockapps which start with\nwm* in the name."));
  gtk_toggle_button_set_active((GtkToggleButton *) prop.chkDispTile, 
 			      wmdock->propDispTile);
  gtk_toggle_button_set_active((GtkToggleButton *) prop.chkPropButton, 
 			      wmdock->propDispPropButton);
+ gtk_toggle_button_set_active((GtkToggleButton *) prop.chkAddOnlyWM, 
+			      wmdock->propDispAddOnlyWM);
  gtk_misc_set_alignment (GTK_MISC (prop.chkDispTile), 0, 0);
  gtk_misc_set_alignment (GTK_MISC (prop.chkPropButton), 0, 0);
- gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.lblGeneral, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkDispTile, FALSE, FALSE, 0);
- gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkPropButton, FALSE, FALSE, 0);
+ gtk_misc_set_alignment (GTK_MISC (prop.chkAddOnlyWM), 0, 0);
+ gtk_container_add(GTK_CONTAINER(prop.frmGeneral), prop.vboxGeneral);
+ gtk_container_add(GTK_CONTAINER(prop.frmDetect), prop.vboxDetect);
+ gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkDispTile, 
+		     FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(prop.vboxGeneral), prop.chkPropButton, 
+		     FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(prop.vboxDetect), prop.chkAddOnlyWM, 
+		     FALSE, FALSE, 0);
+ 
 
  /* Fill the dockapp chooser with entries. */
  wmdock_refresh_properties_dialog();
@@ -997,6 +1052,8 @@
 		  G_CALLBACK(wmdock_properties_chkdisptile), NULL);
  g_signal_connect(G_OBJECT(prop.chkPropButton), "toggled", 
 		  G_CALLBACK(wmdock_properties_chkpropbtn), NULL);
+ g_signal_connect(G_OBJECT(prop.chkAddOnlyWM), "toggled", 
+		  G_CALLBACK(wmdock_properties_chkaddonlywm), NULL);
 
  g_timeout_add (500, wmdock_properties_refresh_dapp_icon, NULL);
 
@@ -1015,6 +1072,7 @@
  wmdock->dapps = NULL;
  wmdock->propDispTile = TRUE;
  wmdock->propDispPropButton = FALSE;
+ wmdock->propDispAddOnlyWM = TRUE;
 
  memset(&prop, 0, sizeof(prop));
 

Modified: xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h
===================================================================
--- xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h	2008-08-23 14:54:14 UTC (rev 5292)
+++ xfce4-wmdock-plugin/trunk/panel-plugin/wmdock.h	2008-08-24 11:55:48 UTC (rev 5293)
@@ -28,6 +28,7 @@
 	
  gboolean        propDispTile;
  gboolean        propDispPropButton;
+ gboolean        propDispAddOnlyWM;
 
  GList           *dapps;
 } WmdockPlugin;




More information about the Goodies-commits mailing list