[Xfce4-commits] <xfce4-settings:master> Add Help button and make existing buttons work with wiki.

Nick Schermer noreply at xfce.org
Sat Jan 7 15:24:01 CET 2012


Updating branch refs/heads/master
         to 31f2aebdefd9078fd7e48b5e388e1fecbcc10de9 (commit)
       from 96e594d619a36d40f9d0dd4765d889af658b5136 (commit)

commit 31f2aebdefd9078fd7e48b5e388e1fecbcc10de9
Author: Nick Schermer <nick at xfce.org>
Date:   Sat Jan 7 15:21:55 2012 +0100

    Add Help button and make existing buttons work with wiki.

 configure.ac.in                                    |    4 +-
 .../accessibility-dialog.glade                     |   17 +++
 dialogs/accessibility-settings/main.c              |   19 +++-
 .../xfce4-accessibility-settings.desktop.in        |    2 +-
 .../appearance-settings/appearance-dialog.glade    |   17 +++
 dialogs/appearance-settings/images.h               |   10 +-
 dialogs/appearance-settings/main.c                 |   19 +++-
 .../xfce-ui-settings.desktop.in                    |    2 +-
 dialogs/display-settings/display-dialog.glade      |   20 +++-
 dialogs/display-settings/display-name.c            |    6 +-
 dialogs/display-settings/edid-parse.c              |   28 +++---
 dialogs/display-settings/edid.h                    |   14 +-
 dialogs/display-settings/main.c                    |   15 ++-
 .../xfce-display-settings.desktop.in               |    2 +-
 dialogs/keyboard-settings/keyboard-dialog.glade    |   17 +++
 dialogs/keyboard-settings/main.c                   |   20 +++-
 .../xfce-keyboard-settings.desktop.in              |    2 +-
 dialogs/mouse-settings/main.c                      |   17 +++-
 dialogs/mouse-settings/mouse-dialog.glade          |   17 +++
 .../mouse-settings/xfce-mouse-settings.desktop.in  |    2 +-
 xfce4-settings-manager/main.c                      |    8 +-
 .../xfce-settings-manager-dialog.c                 |  122 ++++++++-----------
 xfsettingsd/xsettings.c                            |    4 +-
 23 files changed, 248 insertions(+), 136 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index ea6be47..db9313b 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -80,8 +80,8 @@ XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0])
 XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.24.0])
 XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.24.0])
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.8.0])
-XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.8.0])
-XDT_CHECK_PACKAGE([LIBXFCE4KBD_PRIVATE], [libxfce4kbd-private-2], [4.8.0])
+XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.9.0])
+XDT_CHECK_PACKAGE([LIBXFCE4KBD_PRIVATE], [libxfce4kbd-private-2], [4.9.0])
 XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.8.0])
 XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.34])
 XDT_CHECK_PACKAGE([FONTCONFIG], [fontconfig], [2.6.0])
diff --git a/dialogs/accessibility-settings/accessibility-dialog.glade b/dialogs/accessibility-settings/accessibility-dialog.glade
index 03624c2..ea02430 100644
--- a/dialogs/accessibility-settings/accessibility-dialog.glade
+++ b/dialogs/accessibility-settings/accessibility-dialog.glade
@@ -819,6 +819,22 @@ next time you login</property>
                 <property name="position">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button1">
+                <property name="label">gtk-help</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -830,6 +846,7 @@ next time you login</property>
     </child>
     <action-widgets>
       <action-widget response="0">button2</action-widget>
+      <action-widget response="-11">button1</action-widget>
     </action-widgets>
   </object>
 </interface>
diff --git a/dialogs/accessibility-settings/main.c b/dialogs/accessibility-settings/main.c
index 889063c..07d482e 100644
--- a/dialogs/accessibility-settings/main.c
+++ b/dialogs/accessibility-settings/main.c
@@ -159,6 +159,18 @@ accessibility_settings_dialog_configure_widgets (GtkBuilder *builder)
 
 
 
+static void
+accessibility_settings_dialog_response (GtkWidget *dialog,
+                                        gint       response_id)
+{
+    if (response_id == GTK_RESPONSE_HELP)
+        xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings", "accessibility", NULL);
+    else
+        gtk_main_quit ();
+}
+
+
+
 gint
 main (gint argc, gchar **argv)
 {
@@ -234,15 +246,14 @@ main (gint argc, gchar **argv)
             /* Get the dialog widget */
             dialog = gtk_builder_get_object (builder, "dialog");
 
-            gtk_widget_show (GTK_WIDGET (dialog));
-            g_signal_connect (dialog, "response", G_CALLBACK (gtk_main_quit), NULL);
+            g_signal_connect (dialog, "response",
+                G_CALLBACK (accessibility_settings_dialog_response), NULL);
+            gtk_window_present (GTK_WINDOW (dialog));
 
             /* To prevent the settings dialog to be saved in the session */
             gdk_set_sm_client_id ("FAKE ID");
 
             gtk_main ();
-
-            gtk_widget_destroy (GTK_WIDGET (dialog));
         }
         else
         {
diff --git a/dialogs/accessibility-settings/xfce4-accessibility-settings.desktop.in b/dialogs/accessibility-settings/xfce4-accessibility-settings.desktop.in
index a798a70..926d85c 100644
--- a/dialogs/accessibility-settings/xfce4-accessibility-settings.desktop.in
+++ b/dialogs/accessibility-settings/xfce4-accessibility-settings.desktop.in
@@ -10,4 +10,4 @@ Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
 X-XfcePluggable=true
-X-XfceHelpFile=xfce4-settings.html
+X-XfceHelpPage=accessibility
diff --git a/dialogs/appearance-settings/appearance-dialog.glade b/dialogs/appearance-settings/appearance-dialog.glade
index 2880429..e5fb94b 100644
--- a/dialogs/appearance-settings/appearance-dialog.glade
+++ b/dialogs/appearance-settings/appearance-dialog.glade
@@ -610,6 +610,22 @@
                 <property name="position">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="label">gtk-help</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -621,6 +637,7 @@
     </child>
     <action-widgets>
       <action-widget response="0">button1</action-widget>
+      <action-widget response="-11">button2</action-widget>
     </action-widgets>
   </object>
 </interface>
diff --git a/dialogs/appearance-settings/images.h b/dialogs/appearance-settings/images.h
index 2a71799..e9859bb 100644
--- a/dialogs/appearance-settings/images.h
+++ b/dialogs/appearance-settings/images.h
@@ -20,7 +20,7 @@
 #include <config.h>
 #endif
 
-static const gchar *rgba_image_none_xpm[] = 
+static const gchar *rgba_image_none_xpm[] =
 {
     "18 15 1 1",
     " 	c None",
@@ -41,7 +41,7 @@ static const gchar *rgba_image_none_xpm[] =
     "                  "
 };
 
-static const gchar *rgba_image_rgb_xpm[] = 
+static const gchar *rgba_image_rgb_xpm[] =
 {
     "18 15 4 1",
     " 	c None",
@@ -65,7 +65,7 @@ static const gchar *rgba_image_rgb_xpm[] =
     ".....+++++@@@@@   "
 };
 
-static const gchar *rgba_image_bgr_xpm[] = 
+static const gchar *rgba_image_bgr_xpm[] =
 {
     "18 15 4 1",
     " 	c None",
@@ -89,7 +89,7 @@ static const gchar *rgba_image_bgr_xpm[] =
     ".....+++++@@@@@   "
 };
 
-static const gchar *rgba_image_vrgb_xpm[] = 
+static const gchar *rgba_image_vrgb_xpm[] =
 {
     "18 15 4 1",
     " 	c None",
@@ -113,7 +113,7 @@ static const gchar *rgba_image_vrgb_xpm[] =
     "@@@@@@@@@@@@@@@   "
 };
 
-static const gchar *rgba_image_vbgr_xpm[] = 
+static const gchar *rgba_image_vbgr_xpm[] =
 {
     "18 15 4 1",
     " 	c None",
diff --git a/dialogs/appearance-settings/main.c b/dialogs/appearance-settings/main.c
index 0263b76..f1486a1 100644
--- a/dialogs/appearance-settings/main.c
+++ b/dialogs/appearance-settings/main.c
@@ -935,8 +935,18 @@ appearance_settings_dialog_configure_widgets (GtkBuilder *builder)
 #endif
 }
 
+static void
+appearance_settings_dialog_response (GtkWidget *dialog,
+                                     gint       response_id)
+{
+    if (response_id == GTK_RESPONSE_HELP)
+        xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings", "appearance", NULL);
+    else
+        gtk_main_quit ();
+}
+
 gint
-main(gint argc, gchar **argv)
+main (gint argc, gchar **argv)
 {
     GObject    *dialog, *plug_child;
     GtkWidget  *plug;
@@ -1013,15 +1023,14 @@ main(gint argc, gchar **argv)
                 /* build the dialog */
                 dialog = gtk_builder_get_object (builder, "dialog");
 
-                gtk_widget_show (GTK_WIDGET (dialog));
-                g_signal_connect (dialog, "response", G_CALLBACK (gtk_main_quit), NULL);
+                g_signal_connect (dialog, "response",
+                    G_CALLBACK (appearance_settings_dialog_response), NULL);
+                gtk_window_present (GTK_WINDOW (dialog));
 
                 /* To prevent the settings dialog to be saved in the session */
                 gdk_set_sm_client_id ("FAKE ID");
 
                 gtk_main ();
-
-                gtk_widget_destroy (GTK_WIDGET (dialog));
             }
             else
             {
diff --git a/dialogs/appearance-settings/xfce-ui-settings.desktop.in b/dialogs/appearance-settings/xfce-ui-settings.desktop.in
index 514fb54..b6fa1dd 100644
--- a/dialogs/appearance-settings/xfce-ui-settings.desktop.in
+++ b/dialogs/appearance-settings/xfce-ui-settings.desktop.in
@@ -10,4 +10,4 @@ Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
 X-XfcePluggable=true
-X-XfceHelpFile=xfce4-settings.html
+X-XfceHelpPage=appearance
diff --git a/dialogs/display-settings/display-dialog.glade b/dialogs/display-settings/display-dialog.glade
index 0c45e83..4960be6 100644
--- a/dialogs/display-settings/display-dialog.glade
+++ b/dialogs/display-settings/display-dialog.glade
@@ -180,9 +180,6 @@
             <property name="visible">True</property>
             <property name="layout_style">end</property>
             <child>
-              <placeholder/>
-            </child>
-            <child>
               <object class="GtkButton" id="button-close">
                 <property name="label">gtk-close</property>
                 <property name="visible">True</property>
@@ -196,6 +193,22 @@
                 <property name="position">1</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button-help">
+                <property name="label">gtk-help</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -207,6 +220,7 @@
     </child>
     <action-widgets>
       <action-widget response="0">button-close</action-widget>
+      <action-widget response="-11">button-help</action-widget>
     </action-widgets>
   </object>
 </interface>
diff --git a/dialogs/display-settings/display-name.c b/dialogs/display-settings/display-name.c
index 6005585..5e8f8b1 100644
--- a/dialogs/display-settings/display-name.c
+++ b/dialogs/display-settings/display-name.c
@@ -43,7 +43,7 @@ struct Vendor
 };
 
 /* This list of vendor codes derived from lshw
- * 
+ *
  * http://ezix.org/project/wiki/HardwareLiSter
  *
  * Note: we now prefer to use data coming from hwdata (and shipped with
@@ -51,7 +51,7 @@ struct Vendor
  * http://git.fedorahosted.org/git/?p=hwdata.git;a=blob_plain;f=pnp.ids;hb=HEAD
  * All contributions to the list of vendors should go there.
  */
-static const struct Vendor vendors[] = 
+static const struct Vendor vendors[] =
 {
     { "AIC", "AG Neovo" },
     { "ACR", "Acer" },
@@ -284,7 +284,7 @@ make_display_name (const MonitorInfo *info)
 	width_mm = -1;
 	height_mm = -1;
     }
-    
+
     if (width_mm != -1 && height_mm != -1)
     {
 	double d = sqrt (width_mm * width_mm + height_mm * height_mm);
diff --git a/dialogs/display-settings/edid-parse.c b/dialogs/display-settings/edid-parse.c
index 709e82a..3b02c37 100644
--- a/dialogs/display-settings/edid-parse.c
+++ b/dialogs/display-settings/edid-parse.c
@@ -42,7 +42,7 @@ static int
 get_bits (int in, int begin, int end)
 {
     int mask = (1 << (end - begin + 1)) - 1;
-    
+
     return (in >> begin) & mask;
 }
 
@@ -58,14 +58,14 @@ static int
 decode_vendor_and_product_identification (const uchar *edid, MonitorInfo *info)
 {
     int is_model_year;
-    
+
     /* Manufacturer Code */
     info->manufacturer_code[0]  = get_bits (edid[0x08], 2, 6);
     info->manufacturer_code[1]  = get_bits (edid[0x08], 0, 1) << 3;
     info->manufacturer_code[1] |= get_bits (edid[0x09], 5, 7);
     info->manufacturer_code[2]  = get_bits (edid[0x09], 0, 4);
     info->manufacturer_code[3]  = '\0';
-    
+
     info->manufacturer_code[0] += 'A' - 1;
     info->manufacturer_code[1] += 'A' - 1;
     info->manufacturer_code[2] += 'A' - 1;
@@ -127,7 +127,7 @@ decode_display_parameters (const uchar *edid, MonitorInfo *info)
     if (info->is_digital)
     {
 	int bits;
-	
+
 	static const int bit_depth[8] =
 	{
 	    -1, 6, 8, 10, 12, 14, 16, -1
@@ -142,7 +142,7 @@ decode_display_parameters (const uchar *edid, MonitorInfo *info)
 	info->connector.digital.bits_per_primary = bit_depth[bits];
 
 	bits = get_bits (edid[0x14], 0, 3);
-	
+
 	if (bits <= 5)
 	    info->connector.digital.interface = interfaces[bits];
 	else
@@ -151,7 +151,7 @@ decode_display_parameters (const uchar *edid, MonitorInfo *info)
     else
     {
 	int bits = get_bits (edid[0x14], 5, 6);
-	
+
 	static const double levels[][3] =
 	{
 	    { 0.7,   0.3,    1.0 },
@@ -183,7 +183,7 @@ decode_display_parameters (const uchar *edid, MonitorInfo *info)
     else if (edid[0x16] == 0)
     {
 	info->width_mm = -1;
-	info->height_mm = -1; 
+	info->height_mm = -1;
 	info->aspect_ratio = 100.0 / (edid[0x15] + 99);
     }
     else if (edid[0x15] == 0)
@@ -271,7 +271,7 @@ decode_color_characteristics (const uchar *edid, MonitorInfo *info)
 static int
 decode_established_timings (const uchar *edid, MonitorInfo *info)
 {
-    static const Timing established[][8] = 
+    static const Timing established[][8] =
     {
 	{
 	    { 800, 600, 60 },
@@ -325,7 +325,7 @@ static int
 decode_standard_timings (const uchar *edid, MonitorInfo *info)
 {
     int i;
-    
+
     for (i = 0; i < 8; i++)
     {
 	int first = edid[0x26 + 2 * i];
@@ -349,7 +349,7 @@ decode_standard_timings (const uchar *edid, MonitorInfo *info)
 	    info->standard[i].frequency = get_bits (second, 0, 5) + 60;
 	}
     }
-    
+
     return TRUE;
 }
 
@@ -425,7 +425,7 @@ decode_detailed_timing (const uchar *timing,
 	TWO_WAY_RIGHT_ON_EVEN, TWO_WAY_LEFT_ON_EVEN,
 	FOUR_WAY_INTERLEAVED, SIDE_BY_SIDE
     };
-    
+
     detailed->pixel_clock = (timing[0x00] | timing[0x01] << 8) * 10000;
     detailed->h_addr = timing[0x02] | ((timing[0x04] & 0xf0) << 4);
     detailed->h_blank = timing[0x03] | ((timing[0x04] & 0x0f) << 8);
@@ -482,9 +482,9 @@ decode_descriptors (const uchar *edid, MonitorInfo *info)
 {
     int i;
     int timing_idx;
-    
+
     timing_idx = 0;
-    
+
     for (i = 0; i < 4; ++i)
     {
 	int idx = 0x36 + i * 18;
@@ -524,7 +524,7 @@ decode_edid (const uchar *edid)
     MonitorInfo *info = g_new0 (MonitorInfo, 1);
 
     decode_check_sum (edid, info);
-    
+
     if (decode_header (edid)
 	&& decode_vendor_and_product_identification (edid, info)
 	&& decode_edid_version (edid, info)
diff --git a/dialogs/display-settings/edid.h b/dialogs/display-settings/edid.h
index 4ea5cd0..952254f 100644
--- a/dialogs/display-settings/edid.h
+++ b/dialogs/display-settings/edid.h
@@ -1,9 +1,9 @@
 /* edid.h
  *
  * Copyright 2007, 2008, Red Hat, Inc.
- * 
+ *
  * This file is part of the Gnome Library.
- * 
+ *
  * The Gnome Library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
@@ -13,7 +13,7 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License along
  * with the Gnome Library; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
@@ -112,7 +112,7 @@ struct MonitorInfo
     char		manufacturer_code[4];
     int			product_code;
     unsigned int	serial_number;
-    
+
     int			production_week;	/* -1 if not specified */
     int			production_year;	/* -1 if not specified */
     int			model_year;		/* -1 if not specified */
@@ -121,7 +121,7 @@ struct MonitorInfo
     int			minor_version;
 
     int			is_digital;
-    
+
     union
     {
 	struct
@@ -174,12 +174,12 @@ struct MonitorInfo
 
     Timing		established[24];	/* Terminated by 0x0x0 */
     Timing		standard[8];
-    
+
     int			n_detailed_timings;
     DetailedTiming	detailed_timings[4];	/* If monitor has a preferred
 						 * mode, it is the first one
 						 * (whether it has, is
-						 * determined by the 
+						 * determined by the
 						 * preferred_timing_includes
 						 * bit.
 						 */
diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c
index 97440d2..836daea 100644
--- a/dialogs/display-settings/main.c
+++ b/dialogs/display-settings/main.c
@@ -830,7 +830,10 @@ display_settings_dialog_response (GtkDialog  *dialog,
                                   gint        response_id,
                                   GtkBuilder *builder)
 {
-    gtk_main_quit ();
+    if (response_id == GTK_RESPONSE_HELP)
+        xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings", "display", NULL);
+    else
+        gtk_main_quit ();
 }
 
 
@@ -1150,10 +1153,11 @@ main (gint argc, gchar **argv)
 
                 if (G_UNLIKELY (opt_socket_id == 0))
                 {
-                    g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (display_settings_dialog_response), builder);
+                    g_signal_connect (G_OBJECT (dialog), "response",
+                        G_CALLBACK (display_settings_dialog_response), builder);
 
                     /* Show the dialog */
-                    gtk_widget_show (dialog);
+                    gtk_window_present (GTK_WINDOW (dialog));
                 }
                 else
                 {
@@ -1207,7 +1211,8 @@ main (gint argc, gchar **argv)
 
                 /* Build the minimal dialog */
                 dialog = (GtkWidget *) gtk_builder_get_object (builder, "dialog1");
-                g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (display_settings_minimal_dialog_response), builder);
+                g_signal_connect (G_OBJECT (dialog), "response",
+                    G_CALLBACK (display_settings_minimal_dialog_response), builder);
 
                 /* Set the radio buttons captions */
                 first_screen_radio =
@@ -1232,7 +1237,7 @@ main (gint argc, gchar **argv)
                 g_free (screen_name);
 
                 /* Show the minimal dialog and start the main loop */
-                gtk_widget_show (dialog);
+                gtk_window_present (GTK_WINDOW (dialog));
                 gtk_main ();
             }
             else
diff --git a/dialogs/display-settings/xfce-display-settings.desktop.in b/dialogs/display-settings/xfce-display-settings.desktop.in
index ccec807..ef4f1a8 100644
--- a/dialogs/display-settings/xfce-display-settings.desktop.in
+++ b/dialogs/display-settings/xfce-display-settings.desktop.in
@@ -10,4 +10,4 @@ Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
 X-XfcePluggable=true
-X-XfceHelpFile=xfce4-settings.html
+X-XfceHelpPage=display
diff --git a/dialogs/keyboard-settings/keyboard-dialog.glade b/dialogs/keyboard-settings/keyboard-dialog.glade
index 4ab90ae..9edbb6d 100644
--- a/dialogs/keyboard-settings/keyboard-dialog.glade
+++ b/dialogs/keyboard-settings/keyboard-dialog.glade
@@ -127,6 +127,22 @@
                 <property name="position">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button1">
+                <property name="label">gtk-help</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -824,6 +840,7 @@
     </child>
     <action-widgets>
       <action-widget response="0">button2</action-widget>
+      <action-widget response="-11">button1</action-widget>
     </action-widgets>
   </object>
   <object class="GtkAdjustment" id="net_cursor_blink_time">
diff --git a/dialogs/keyboard-settings/main.c b/dialogs/keyboard-settings/main.c
index 6368ee6..8960c6b 100644
--- a/dialogs/keyboard-settings/main.c
+++ b/dialogs/keyboard-settings/main.c
@@ -26,6 +26,7 @@
 #include <gtk/gtk.h>
 
 #include <libxfce4util/libxfce4util.h>
+#include <libxfce4ui/libxfce4ui.h>
 #include <xfconf/xfconf.h>
 
 #include "xfce-keyboard-settings.h"
@@ -42,6 +43,18 @@ static GOptionEntry    entries[] = {
 
 
 
+static void
+keyboard_settings_dialog_response (GtkWidget *dialog,
+                                   gint       response_id)
+{
+    if (response_id == GTK_RESPONSE_HELP)
+        xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings", "keyboard", NULL);
+    else
+        gtk_main_quit ();
+}
+
+
+
 int
 main (int    argc,
       char **argv)
@@ -110,15 +123,14 @@ main (int    argc,
       dialog = xfce_keyboard_settings_create_dialog (settings);
       gtk_window_set_default_size (GTK_WINDOW (dialog), 450, -1);
 
-      gtk_widget_show (GTK_WIDGET (dialog));
-      g_signal_connect (dialog, "response", G_CALLBACK (gtk_main_quit), NULL);
+      g_signal_connect (dialog, "response",
+          G_CALLBACK (keyboard_settings_dialog_response), NULL);
+      gtk_window_present (GTK_WINDOW (dialog));
 
       /* To prevent the settings dialog to be saved in the session */
       gdk_set_sm_client_id ("FAKE ID");
 
       gtk_main ();
-
-      gtk_widget_destroy (GTK_WIDGET (dialog));
     }
   else
     {
diff --git a/dialogs/keyboard-settings/xfce-keyboard-settings.desktop.in b/dialogs/keyboard-settings/xfce-keyboard-settings.desktop.in
index 75c4904..c2fdcb0 100644
--- a/dialogs/keyboard-settings/xfce-keyboard-settings.desktop.in
+++ b/dialogs/keyboard-settings/xfce-keyboard-settings.desktop.in
@@ -10,4 +10,4 @@ Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
 X-XfcePluggable=true
-X-XfceHelpFile=xfce4-settings.html
+X-XfceHelpPage=keyboard
diff --git a/dialogs/mouse-settings/main.c b/dialogs/mouse-settings/main.c
index c656d93..5354794 100644
--- a/dialogs/mouse-settings/main.c
+++ b/dialogs/mouse-settings/main.c
@@ -1476,6 +1476,18 @@ mouse_settings_create_event_filter (GtkBuilder *builder)
 
 
 
+static void
+mouse_settings_dialog_response (GtkWidget *dialog,
+                                gint       response_id)
+{
+    if (response_id == GTK_RESPONSE_HELP)
+        xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings", "mouse", NULL);
+    else
+        gtk_main_quit ();
+}
+
+
+
 gint
 main (gint argc, gchar **argv)
 {
@@ -1687,8 +1699,9 @@ main (gint argc, gchar **argv)
                 /* unlock */
                 locked--;
 
-                gtk_widget_show (GTK_WIDGET (dialog));
-                g_signal_connect (dialog, "response", G_CALLBACK (gtk_main_quit), NULL);
+                g_signal_connect (dialog, "response",
+                    G_CALLBACK (mouse_settings_dialog_response), NULL);
+                gtk_window_present (GTK_WINDOW (dialog));
 
                 /* To prevent the settings dialog to be saved in the session */
                 gdk_set_sm_client_id ("FAKE ID");
diff --git a/dialogs/mouse-settings/mouse-dialog.glade b/dialogs/mouse-settings/mouse-dialog.glade
index 74e9ef0..f25b613 100644
--- a/dialogs/mouse-settings/mouse-dialog.glade
+++ b/dialogs/mouse-settings/mouse-dialog.glade
@@ -74,6 +74,22 @@
                 <property name="position">0</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkButton" id="button2">
+                <property name="label">gtk-help</property>
+                <property name="use_action_appearance">False</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -1137,6 +1153,7 @@
     </child>
     <action-widgets>
       <action-widget response="0">button1</action-widget>
+      <action-widget response="-11">button2</action-widget>
     </action-widgets>
   </object>
   <object class="GtkAdjustment" id="theme-cursor-size">
diff --git a/dialogs/mouse-settings/xfce-mouse-settings.desktop.in b/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
index 56c194b..17edc51 100644
--- a/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
+++ b/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
@@ -10,4 +10,4 @@ Categories=X-XFCE;Settings;DesktopSettings;X-XfceSettingsDialog;
 StartupNotify=true
 OnlyShowIn=XFCE;
 X-XfcePluggable=true
-X-XfceHelpFile=xfce4-settings.html
+X-XfceHelpPage=mouse
diff --git a/xfce4-settings-manager/main.c b/xfce4-settings-manager/main.c
index 71332f6..c3c3806 100644
--- a/xfce4-settings-manager/main.c
+++ b/xfce4-settings-manager/main.c
@@ -35,9 +35,9 @@ static gboolean opt_version = FALSE;
 static gchar   *opt_dialog = NULL;
 
 static GOptionEntry option_entries[] = {
-    { "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &opt_version, 
+    { "version", 'V', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &opt_version,
       N_("Version information"), NULL },
-    { "dialog", 'd', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &opt_dialog, 
+    { "dialog", 'd', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &opt_dialog,
       N_("Settings dialog to show"), NULL },
     { NULL }
 };
@@ -75,7 +75,7 @@ main(int argc,
 
     if(G_UNLIKELY(!xfconf_init (&error))) {
         if(G_LIKELY(error != NULL)) {
-            g_error("%s: Failed to initialize xfconf: %s.\n", G_LOG_DOMAIN, 
+            g_error("%s: Failed to initialize xfconf: %s.\n", G_LOG_DOMAIN,
                     error->message);
             g_error_free(error);
         } else {
@@ -90,7 +90,7 @@ main(int argc,
                      G_CALLBACK(gtk_main_quit), NULL);
 
     if(opt_dialog != NULL) {
-        xfce_settings_manager_dialog_show_dialog(XFCE_SETTINGS_MANAGER_DIALOG(dialog), 
+        xfce_settings_manager_dialog_show_dialog(XFCE_SETTINGS_MANAGER_DIALOG(dialog),
                                                  opt_dialog);
     }
 
diff --git a/xfce4-settings-manager/xfce-settings-manager-dialog.c b/xfce4-settings-manager/xfce-settings-manager-dialog.c
index b49c5e6..4aa3822 100644
--- a/xfce4-settings-manager/xfce-settings-manager-dialog.c
+++ b/xfce4-settings-manager/xfce-settings-manager-dialog.c
@@ -73,7 +73,7 @@ struct _XfceSettingsManagerDialog
     const gchar *default_subtitle;
     const gchar *default_icon;
 
-    gchar *help_file;
+    gchar *help_page;
 
     GPid last_pid;
 };
@@ -92,7 +92,7 @@ enum
     COL_SNOTIFY,
 #ifdef ENABLE_PLUGGABLE_DIALOGS
     COL_PLUGGABLE,
-    COL_HELP_FILE,
+    COL_HELP_PAGE,
 #endif
     COL_DIALOG_NAME,
     N_COLS
@@ -157,7 +157,7 @@ xfce_settings_manager_dialog_init(XfceSettingsManagerDialog *dialog)
     dialog->socket = NULL;
     dialog->last_pid = -1;
 
-    dialog->help_file = NULL;
+    dialog->help_page = NULL;
 #endif
 
     dialog->default_title = _("Settings");
@@ -181,11 +181,11 @@ xfce_settings_manager_dialog_init(XfceSettingsManagerDialog *dialog)
 
     dialog->content_frame = gtk_vbox_new(FALSE, 0);
     gtk_widget_show(dialog->content_frame);
-    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 
+    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
                       dialog->content_frame);
 
     dialog->scrollwin = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(dialog->scrollwin), 
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(dialog->scrollwin),
                                         GTK_SHADOW_IN);
     gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(dialog->scrollwin),
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@@ -214,41 +214,41 @@ xfce_settings_manager_dialog_init(XfceSettingsManagerDialog *dialog)
                      NULL);
 
     render = gtk_cell_renderer_pixbuf_new();
-    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->icon_view), render, 
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dialog->icon_view), render,
                                FALSE);
     gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(dialog->icon_view), render,
                                   "icon-name", COL_ICON_NAME);
-    g_object_set(render, "stock-size", GTK_ICON_SIZE_DIALOG, 
+    g_object_set(render, "stock-size", GTK_ICON_SIZE_DIALOG,
                  "follow-state", TRUE, NULL);
 
     render = xfce_text_renderer_new();
     gtk_cell_layout_pack_end(GTK_CELL_LAYOUT(dialog->icon_view), render, TRUE);
     gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(dialog->icon_view), render,
                                   "text", COL_NAME);
-    g_object_set(render, "follow-state", TRUE, "follow-prelit", TRUE, 
+    g_object_set(render, "follow-state", TRUE, "follow-prelit", TRUE,
                  "wrap-width", 128, NULL);
 
 #ifdef ENABLE_PLUGGABLE_DIALOGS
     /* Create client frame to contain the socket scroll window */
     dialog->client_frame = gtk_frame_new (NULL);
-    gtk_frame_set_shadow_type(GTK_FRAME(dialog->client_frame), 
+    gtk_frame_set_shadow_type(GTK_FRAME(dialog->client_frame),
                               GTK_SHADOW_NONE);
     gtk_widget_hide(dialog->client_frame);
-    gtk_container_add(GTK_CONTAINER(dialog->content_frame), 
+    gtk_container_add(GTK_CONTAINER(dialog->content_frame),
                       dialog->client_frame);
 
     /* Create scroll window to contain the socket viewport */
     scrollwin = gtk_scrolled_window_new(NULL, NULL);
-    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin), 
+    gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrollwin),
                                         GTK_SHADOW_NONE);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), 
+    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin),
                                    GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
     gtk_widget_show(scrollwin);
     gtk_container_add(GTK_CONTAINER(dialog->client_frame), scrollwin);
 
     /* Create socket viewport */
     dialog->socket_viewport = gtk_viewport_new(NULL, NULL);
-    gtk_viewport_set_shadow_type(GTK_VIEWPORT(dialog->socket_viewport), 
+    gtk_viewport_set_shadow_type(GTK_VIEWPORT(dialog->socket_viewport),
                                  GTK_SHADOW_NONE);
     gtk_widget_show(dialog->socket_viewport);
     gtk_container_add(GTK_CONTAINER(scrollwin), dialog->socket_viewport);
@@ -270,21 +270,21 @@ xfce_settings_manager_dialog_init(XfceSettingsManagerDialog *dialog)
     /* Create back button which takes the user back to the overview */
     dialog->back_button = gtk_button_new_with_mnemonic(_("_Overview"));
     gtk_button_set_image(GTK_BUTTON(dialog->back_button),
-                         gtk_image_new_from_stock(GTK_STOCK_GO_BACK, 
+                         gtk_image_new_from_stock(GTK_STOCK_GO_BACK,
                                                   GTK_ICON_SIZE_BUTTON));
-    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 
+    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
                       dialog->back_button);
     gtk_widget_set_sensitive(dialog->back_button, FALSE);
     gtk_widget_show(dialog->back_button);
 
-    g_signal_connect(dialog->back_button, "clicked", 
+    g_signal_connect(dialog->back_button, "clicked",
                      G_CALLBACK(xfce_settings_manager_dialog_back_button_clicked),
                      dialog);
 #endif
 
     /* Create help button */
     dialog->help_button = gtk_button_new_from_stock(GTK_STOCK_HELP);
-    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 
+    gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area),
                       dialog->help_button);
     gtk_widget_hide(dialog->help_button);
 
@@ -302,8 +302,8 @@ static void
 xfce_settings_manager_dialog_finalize(GObject *obj)
 {
     XfceSettingsManagerDialog *dialog = XFCE_SETTINGS_MANAGER_DIALOG(obj);
-    
-    g_free (dialog->help_file);
+
+    g_free (dialog->help_page);
     g_object_unref(dialog->ls);
 
     G_OBJECT_CLASS(xfce_settings_manager_dialog_parent_class)->finalize(obj);
@@ -329,10 +329,10 @@ xfce_settings_manager_dialog_reset_view(XfceSettingsManagerDialog *dialog,
         gtk_widget_set_sensitive(dialog->back_button, FALSE);
 
         /* Use default help url */
-        g_free(dialog->help_file);
-        dialog->help_file = NULL;
+        g_free(dialog->help_page);
+        dialog->help_page = NULL;
 #endif
-        
+
         /* Show the help button */
         gtk_widget_show(dialog->help_button);
     } else {
@@ -389,18 +389,18 @@ xfce_settings_manager_dialog_create_liststore(XfceSettingsManagerDialog *dialog)
     gint i, icon_size;
     GList *dialog_name_list = NULL;
 
-    dialog->ls = gtk_list_store_new(N_COLS, 
-                                    G_TYPE_STRING, 
+    dialog->ls = gtk_list_store_new(N_COLS,
+                                    G_TYPE_STRING,
                                     G_TYPE_STRING,
-                                    G_TYPE_STRING, 
                                     G_TYPE_STRING,
-                                    G_TYPE_BOOLEAN, 
+                                    G_TYPE_STRING,
+                                    G_TYPE_BOOLEAN,
 #ifdef ENABLE_PLUGGABLE_DIALOGS
-                                    G_TYPE_BOOLEAN, 
-                                    G_TYPE_STRING, 
+                                    G_TYPE_BOOLEAN,
+                                    G_TYPE_STRING,
 #endif
                                     G_TYPE_STRING);
-    
+
     dirs = xfce_resource_lookup_all(XFCE_RESOURCE_DATA, "applications/");
     if(!dirs)
         return;
@@ -510,7 +510,7 @@ xfce_settings_manager_dialog_create_liststore(XfceSettingsManagerDialog *dialog)
                                COL_SNOTIFY, xfce_rc_read_bool_entry(rcfile, "StartupNotify", FALSE),
 #ifdef ENABLE_PLUGGABLE_DIALOGS
                                COL_PLUGGABLE, xfce_rc_read_bool_entry(rcfile, "X-XfcePluggable", FALSE),
-                               COL_HELP_FILE, xfce_rc_read_entry(rcfile, "X-XfceHelpFile", FALSE),
+                               COL_HELP_PAGE, xfce_rc_read_entry(rcfile, "X-XfceHelpPage", FALSE),
 #endif
                                COL_DIALOG_NAME, dialog_name,
                                -1);
@@ -543,7 +543,7 @@ xfce_settings_manager_dialog_item_activated(ExoIconView *iconview,
     gboolean snotify = FALSE;
 #ifdef ENABLE_PLUGGABLE_DIALOGS
     gboolean pluggable = FALSE;
-    gchar *help_file, *command;
+    gchar *help_page, *command;
 #endif
     GError *error = NULL;
 
@@ -558,7 +558,7 @@ xfce_settings_manager_dialog_item_activated(ExoIconView *iconview,
                        COL_SNOTIFY, &snotify,
 #ifdef ENABLE_PLUGGABLE_DIALOGS
                        COL_PLUGGABLE, &pluggable,
-                       COL_HELP_FILE, &help_file,
+                       COL_HELP_PAGE, &help_page,
 #endif
                        -1);
 
@@ -576,13 +576,13 @@ xfce_settings_manager_dialog_item_activated(ExoIconView *iconview,
         xfce_settings_manager_dialog_reset_view(dialog, FALSE);
 
         /* If the dialog supports help, show the help button */
-        if(help_file) {
+        if(help_page) {
             gtk_widget_show (dialog->help_button);
 
             /* Replace the current help url */
-            g_free(dialog->help_file);
-            dialog->help_file = g_strdup(help_file);
-        } 
+            g_free(dialog->help_page);
+            dialog->help_page = g_strdup(help_page);
+        }
 
         /* Build the dialog command */
         command = g_strdup_printf("%s --socket-id=%d", exec,
@@ -620,7 +620,7 @@ xfce_settings_manager_dialog_item_activated(ExoIconView *iconview,
 #ifdef ENABLE_PLUGGABLE_DIALOGS
     }
 
-    g_free(help_file);
+    g_free(help_page);
 #endif
     g_free(exec);
     g_free(name);
@@ -639,33 +639,13 @@ xfce_settings_manager_dialog_back_button_clicked(GtkWidget *button,
 }
 #endif
 
-static void 
+static void
 xfce_settings_manager_dialog_help_button_clicked(GtkWidget *button,
                                                  XfceSettingsManagerDialog *dialog)
 {
-    GError *error = NULL;
-    gchar  *command;
-
-    /* Open absolute filenames with exo-open and relative filenames with xfhelp4 */
-    if(dialog->help_file) {
-        if(g_path_is_absolute(dialog->help_file))
-            command = g_strconcat("exo-open ", dialog->help_file, NULL);
-        else
-            command = g_strconcat("xfhelp4 ", dialog->help_file, NULL);
-    } else {
-        /* TODO: Maybe use xfce4-settings-manager.html or something similar here */
-        command = g_strconcat("xfhelp4 ", "xfce4-settings.html", NULL);
-    }
-
-    /* Try to open the documentation */
-    if(!gdk_spawn_command_line_on_screen(gtk_widget_get_screen(button), 
-                                         command, &error))
-    {
-        xfce_dialog_show_error (NULL, error, _("Failed to open the documentation"));
-        g_error_free(error);
-    }
-
-    g_free(command);
+    xfce_dialog_show_help (GTK_WINDOW (dialog), "xfce4-settings",
+                           dialog->help_page ? dialog->help_page : "manager",
+                           NULL);
 }
 
 static void
@@ -709,7 +689,7 @@ xfce_settings_manager_dialog_plug_added(GtkSocket *socket,
 {
     g_return_if_fail(XFCE_IS_SETTINGS_MANAGER_DIALOG(dialog));
 
-    g_timeout_add(250, (GSourceFunc) xfce_settings_manager_dialog_show_client, 
+    g_timeout_add(250, (GSourceFunc) xfce_settings_manager_dialog_show_client,
                   dialog);
 }
 
@@ -730,15 +710,15 @@ xfce_settings_manager_dialog_recreate_socket(XfceSettingsManagerDialog *dialog)
     dialog->socket = gtk_socket_new();
     gtk_widget_show(dialog->socket);
     gtk_container_add(GTK_CONTAINER(dialog->socket_viewport), dialog->socket);
-    
+
     /* Handle newly added plugs in a callback */
-    g_signal_connect(dialog->socket, "plug-added", 
+    g_signal_connect(dialog->socket, "plug-added",
                      G_CALLBACK(xfce_settings_manager_dialog_plug_added),
                      dialog);
 
     /* Add plug-removed callback to be able to re-use the socket when plugs
      * are removed */
-    g_signal_connect(dialog->socket, "plug-removed", 
+    g_signal_connect(dialog->socket, "plug-removed",
                      G_CALLBACK(xfce_settings_manager_dialog_plug_removed),
                      dialog);
 
@@ -754,15 +734,15 @@ xfce_settings_manager_dialog_compute_default_size (XfceSettingsManagerDialog *di
     GdkRectangle screen_size;
     GdkScreen *screen;
     gint monitor;
-  
+
     screen = gtk_widget_get_screen(GTK_WIDGET(dialog));
-  
+
     gtk_widget_realize(GTK_WIDGET(dialog));
     monitor = gdk_screen_get_monitor_at_window(screen, GTK_WIDGET(dialog)->window);
     gtk_widget_unrealize(GTK_WIDGET(dialog));
-  
+
     gdk_screen_get_monitor_geometry (screen, monitor, &screen_size);
-  
+
     *width = MIN(screen_size.width * 2.0 / 3, WINDOW_MAX_WIDTH);
     *height = MIN(screen_size.height * 2.0 / 3, WINDOW_MAX_HEIGHT);
 }
@@ -832,7 +812,7 @@ xfce_settings_manager_dialog_new(void)
 
 
 
-void 
+void
 xfce_settings_manager_dialog_show_dialog (XfceSettingsManagerDialog *dialog,
                                           const gchar *dialog_name)
 {
@@ -845,7 +825,7 @@ xfce_settings_manager_dialog_show_dialog (XfceSettingsManagerDialog *dialog,
   g_return_if_fail (dialog_name != NULL);
 
   model = exo_icon_view_get_model(EXO_ICON_VIEW(dialog->icon_view));
-  
+
   if(G_LIKELY(gtk_tree_model_get_iter_first(model, &iter))) {
       do {
           gtk_tree_model_get(model, &iter, COL_DIALOG_NAME, &name, -1);
diff --git a/xfsettingsd/xsettings.c b/xfsettingsd/xsettings.c
index 4d96b56..4619d7e 100644
--- a/xfsettingsd/xsettings.c
+++ b/xfsettingsd/xsettings.c
@@ -1029,7 +1029,7 @@ xfce_xsettings_helper_timestamp_predicate (Display  *xdisplay,
 
 
 
-Time     
+Time
 xfce_xsettings_get_server_time (Display *xdisplay,
                                 Window   window)
 {
@@ -1060,7 +1060,7 @@ xfce_xsettings_helper_register (XfceXSettingsHelper *helper,
     gchar                atom_name[64];
     Atom                 selection_atom;
     gint                 n_screens, n;
-    
+
     XfceXSettingsScreen *screen;
     Time                 timestamp;
     XClientMessageEvent  xev;


More information about the Xfce4-commits mailing list