Add the Inactive OSD font, and the primaryMonitor options
authorDana Jansens <danakj@orodu.net>
Mon, 21 Dec 2009 18:02:09 +0000 (13:02 -0500)
committerDana Jansens <danakj@orodu.net>
Mon, 21 Dec 2009 19:16:43 +0000 (14:16 -0500)
src/appearance.c
src/main.c
src/obconf.glade
src/preview_update.c
src/preview_update.h
src/strings.c
src/windows.c

index 293e43f..f130311 100644 (file)
@@ -23,7 +23,7 @@
 
 static gboolean mapping = FALSE;
 
-static RrFont *read_font(GtkFontButton *w, const gchar *place);
+static RrFont *read_font(GtkFontButton *w, const gchar *place, gboolean def);
 static RrFont *write_font(GtkFontButton *w, const gchar *place);
 
 void appearance_setup_tab()
@@ -49,24 +49,31 @@ void appearance_setup_tab()
     g_free(layout);
 
     w = get_widget("font_active");
-    f = read_font(GTK_FONT_BUTTON(w), "ActiveWindow");
+    f = read_font(GTK_FONT_BUTTON(w), "ActiveWindow", TRUE);
     preview_update_set_active_font(f);
 
     w = get_widget("font_inactive");
-    f = read_font(GTK_FONT_BUTTON(w), "InactiveWindow");
+    f = read_font(GTK_FONT_BUTTON(w), "InactiveWindow", TRUE);
     preview_update_set_inactive_font(f);
 
     w = get_widget("font_menu_header");
-    f = read_font(GTK_FONT_BUTTON(w), "MenuHeader");
+    f = read_font(GTK_FONT_BUTTON(w), "MenuHeader", TRUE);
     preview_update_set_menu_header_font(f);
 
     w = get_widget("font_menu_item");
-    f = read_font(GTK_FONT_BUTTON(w), "MenuItem");
+    f = read_font(GTK_FONT_BUTTON(w), "MenuItem", TRUE);
     preview_update_set_menu_item_font(f);
 
-    w = get_widget("font_display");
-    f = read_font(GTK_FONT_BUTTON(w), "OnScreenDisplay");
-    preview_update_set_osd_font(f);
+    w = get_widget("font_active_display");
+    if (!(f = read_font(GTK_FONT_BUTTON(w), "ActiveOnScreenDisplay", FALSE))) {
+        f = read_font(GTK_FONT_BUTTON(w), "OnScreenDisplay", TRUE);
+        tree_delete_node("theme/font:place=OnScreenDisplay");
+    }
+    preview_update_set_osd_active_font(f);
+
+    w = get_widget("font_inactive_display");
+    f = read_font(GTK_FONT_BUTTON(w), "InactiveOnScreenDisplay", TRUE);
+    preview_update_set_osd_inactive_font(f);
 
     mapping = FALSE;
 }
@@ -185,14 +192,23 @@ void on_font_menu_item_font_set(GtkFontButton *w, gpointer data)
     preview_update_set_menu_item_font(write_font(w, "MenuItem"));
 }
 
-void on_font_display_font_set(GtkFontButton *w, gpointer data)
+void on_font_active_display_font_set(GtkFontButton *w, gpointer data)
 {
     if (mapping) return;
 
-    preview_update_set_osd_font(write_font(w, "OnScreenDisplay"));
+    preview_update_set_osd_active_font(write_font(w, "ActiveOnScreenDisplay"));
 }
 
-static RrFont *read_font(GtkFontButton *w, const gchar *place)
+void on_font_inactive_display_font_set(GtkFontButton *w, gpointer data)
+{
+    if (mapping) return;
+
+    preview_update_set_osd_inactive_font
+        (write_font(w, "InactiveOnScreenDisplay"));
+}
+
+static RrFont *read_font(GtkFontButton *w, const gchar *place,
+                         gboolean use_default)
 {
     RrFont *font;
     gchar *fontstring, *node;
@@ -207,9 +223,14 @@ static RrFont *read_font(GtkFontButton *w, const gchar *place)
     mapping = TRUE;
 
     node = g_strdup_printf("theme/font:place=%s/name", place);
-    name = tree_get_string(node, "Sans");
+    name = tree_get_string(node, use_default ? "Sans" : NULL);
     g_free(node);
 
+    if (name[0] == '\0') {
+        g_free(name);
+        return NULL;
+    }
+
     node = g_strdup_printf("theme/font:place=%s/size", place);
     size = tree_get_string(node, "8");
     g_free(node);
index 875b783..f72976e 100644 (file)
@@ -297,7 +297,8 @@ int main(int argc, char **argv)
         preview_update_set_inactive_font(NULL);
         preview_update_set_menu_header_font(NULL);
         preview_update_set_menu_item_font(NULL);
-        preview_update_set_osd_font(NULL);
+        preview_update_set_osd_active_font(NULL);
+        preview_update_set_osd_inactive_font(NULL);
         preview_update_set_title_layout(NULL);
     }
 
index 81e926f..464acff 100644 (file)
@@ -943,7 +943,7 @@ Omnipresent (On all desktops)</property>
                      <child>
                        <widget class="GtkTable" id="table1">
                          <property name="visible">True</property>
-                         <property name="n_rows">5</property>
+                         <property name="n_rows">6</property>
                          <property name="n_columns">2</property>
                          <property name="homogeneous">False</property>
                          <property name="row_spacing">3</property>
@@ -1012,27 +1012,6 @@ Omnipresent (On all desktops)</property>
                            </packing>
                          </child>
 
-                         <child>
-                           <widget class="GtkFontButton" id="font_display">
-                             <property name="visible">True</property>
-                             <property name="can_focus">True</property>
-                             <property name="show_style">True</property>
-                             <property name="show_size">True</property>
-                             <property name="use_font">True</property>
-                             <property name="use_size">False</property>
-                             <property name="focus_on_click">True</property>
-                             <signal name="font_set" handler="on_font_display_font_set" last_modification_time="Fri, 25 May 2007 16:03:23 GMT"/>
-                           </widget>
-                           <packing>
-                             <property name="left_attach">1</property>
-                             <property name="right_attach">2</property>
-                             <property name="top_attach">4</property>
-                             <property name="bottom_attach">5</property>
-                             <property name="x_options">fill</property>
-                             <property name="y_options"></property>
-                           </packing>
-                         </child>
-
                          <child>
                            <widget class="GtkLabel" id="label94">
                              <property name="visible">True</property>
@@ -1152,7 +1131,7 @@ Omnipresent (On all desktops)</property>
                          <child>
                            <widget class="GtkLabel" id="label98">
                              <property name="visible">True</property>
-                             <property name="label" translatable="yes">_On-screen display: </property>
+                             <property name="label" translatable="yes">Active _On-screen display: </property>
                              <property name="use_underline">True</property>
                              <property name="use_markup">False</property>
                              <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -1162,7 +1141,6 @@ Omnipresent (On all desktops)</property>
                              <property name="yalign">0.5</property>
                              <property name="xpad">0</property>
                              <property name="ypad">0</property>
-                             <property name="mnemonic_widget">font_display</property>
                              <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
                              <property name="width_chars">-1</property>
                              <property name="single_line_mode">False</property>
@@ -1197,6 +1175,76 @@ Omnipresent (On all desktops)</property>
                              <property name="y_options"></property>
                            </packing>
                          </child>
+
+                         <child>
+                           <widget class="GtkLabel" id="label240">
+                             <property name="visible">True</property>
+                             <property name="label" translatable="yes">Inactive O_n-screen display: </property>
+                             <property name="use_underline">True</property>
+                             <property name="use_markup">False</property>
+                             <property name="justify">GTK_JUSTIFY_LEFT</property>
+                             <property name="wrap">False</property>
+                             <property name="selectable">False</property>
+                             <property name="xalign">1</property>
+                             <property name="yalign">0.5</property>
+                             <property name="xpad">0</property>
+                             <property name="ypad">0</property>
+                             <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                             <property name="width_chars">-1</property>
+                             <property name="single_line_mode">False</property>
+                             <property name="angle">0</property>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">0</property>
+                             <property name="right_attach">1</property>
+                             <property name="top_attach">5</property>
+                             <property name="bottom_attach">6</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkFontButton" id="font_active_display">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="show_style">True</property>
+                             <property name="show_size">True</property>
+                             <property name="use_font">True</property>
+                             <property name="use_size">False</property>
+                             <property name="focus_on_click">True</property>
+                             <signal name="font_set" handler="on_font_active_display_font_set" last_modification_time="Mon, 21 Dec 2009 16:08:46 GMT"/>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">4</property>
+                             <property name="bottom_attach">5</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkFontButton" id="font_inactive_display">
+                             <property name="visible">True</property>
+                             <property name="can_focus">True</property>
+                             <property name="show_style">True</property>
+                             <property name="show_size">True</property>
+                             <property name="use_font">True</property>
+                             <property name="use_size">False</property>
+                             <property name="focus_on_click">True</property>
+                             <signal name="font_set" handler="on_font_inactive_display_font_set" last_modification_time="Mon, 21 Dec 2009 16:08:52 GMT"/>
+                           </widget>
+                           <packing>
+                             <property name="left_attach">1</property>
+                             <property name="right_attach">2</property>
+                             <property name="top_attach">5</property>
+                             <property name="bottom_attach">6</property>
+                             <property name="x_options">fill</property>
+                             <property name="y_options"></property>
+                           </packing>
+                         </child>
                        </widget>
                        <packing>
                          <property name="padding">0</property>
@@ -1576,6 +1624,301 @@ Omnipresent (On all desktops)</property>
                  <property name="fill">True</property>
                </packing>
              </child>
+
+             <child>
+               <widget class="GtkVBox" id="vbox86">
+                 <property name="visible">True</property>
+                 <property name="homogeneous">False</property>
+                 <property name="spacing">6</property>
+
+                 <child>
+                   <widget class="GtkLabel" id="label243">
+                     <property name="visible">True</property>
+                     <property name="label" translatable="yes">&lt;span weight=&quot;bold&quot;&gt;Primary Monitor&lt;/span&gt;</property>
+                     <property name="use_underline">False</property>
+                     <property name="use_markup">True</property>
+                     <property name="justify">GTK_JUSTIFY_LEFT</property>
+                     <property name="wrap">False</property>
+                     <property name="selectable">False</property>
+                     <property name="xalign">0</property>
+                     <property name="yalign">0.5</property>
+                     <property name="xpad">0</property>
+                     <property name="ypad">0</property>
+                     <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                     <property name="width_chars">-1</property>
+                     <property name="single_line_mode">False</property>
+                     <property name="angle">0</property>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">False</property>
+                   </packing>
+                 </child>
+
+                 <child>
+                   <widget class="GtkHBox" id="hbox120">
+                     <property name="visible">True</property>
+                     <property name="homogeneous">False</property>
+                     <property name="spacing">0</property>
+
+                     <child>
+                       <widget class="GtkLabel" id="label244">
+                         <property name="visible">True</property>
+                         <property name="label">    </property>
+                         <property name="use_underline">False</property>
+                         <property name="use_markup">False</property>
+                         <property name="justify">GTK_JUSTIFY_LEFT</property>
+                         <property name="wrap">False</property>
+                         <property name="selectable">False</property>
+                         <property name="xalign">0.5</property>
+                         <property name="yalign">0.5</property>
+                         <property name="xpad">0</property>
+                         <property name="ypad">0</property>
+                         <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                         <property name="width_chars">-1</property>
+                         <property name="single_line_mode">False</property>
+                         <property name="angle">0</property>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">False</property>
+                         <property name="fill">False</property>
+                       </packing>
+                     </child>
+
+                     <child>
+                       <widget class="GtkVBox" id="vbox87">
+                         <property name="visible">True</property>
+                         <property name="homogeneous">False</property>
+                         <property name="spacing">6</property>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox122">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">0</property>
+
+                             <child>
+                               <widget class="GtkLabel" id="label246">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">The primary monitor is where Openbox will place dialogs, such as the one used for cycling windows.</property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">True</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">0</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">False</property>
+                             <property name="fill">False</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox121">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkLabel" id="label245">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">Primary _monitor:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="mnemonic_widget">primary_monitor_popup</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkOptionMenu" id="primary_monitor_popup">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="history">1</property>
+
+                                 <child>
+                                   <widget class="GtkMenu" id="menu16">
+
+                                     <child>
+                                       <widget class="GtkMenuItem" id="item1">
+                                         <property name="visible">True</property>
+                                         <property name="label" translatable="yes">Fixed Monitor</property>
+                                         <property name="use_underline">True</property>
+                                         <signal name="activate" handler="on_primary_monitor_fixed_activate" last_modification_time="Mon, 21 Dec 2009 18:23:48 GMT"/>
+                                       </widget>
+                                     </child>
+
+                                     <child>
+                                       <widget class="GtkMenuItem" id="active_monitor1">
+                                         <property name="visible">True</property>
+                                         <property name="label" translatable="yes">Active Monitor</property>
+                                         <property name="use_underline">True</property>
+                                         <signal name="activate" handler="on_primary_monitor_active_activate" last_modification_time="Mon, 21 Dec 2009 18:23:48 GMT"/>
+                                       </widget>
+                                     </child>
+
+                                     <child>
+                                       <widget class="GtkMenuItem" id="monitor_with_mouse_pointer1">
+                                         <property name="visible">True</property>
+                                         <property name="label" translatable="yes">Monitor With Mouse Pointer</property>
+                                         <property name="use_underline">True</property>
+                                         <signal name="activate" handler="on_primary_monitor_mouse_activate" last_modification_time="Mon, 21 Dec 2009 18:23:48 GMT"/>
+                                       </widget>
+                                     </child>
+                                   </widget>
+                                 </child>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+
+                         <child>
+                           <widget class="GtkHBox" id="hbox123">
+                             <property name="visible">True</property>
+                             <property name="homogeneous">False</property>
+                             <property name="spacing">6</property>
+
+                             <child>
+                               <widget class="GtkLabel" id="label249">
+                                 <property name="visible">True</property>
+                                 <property name="label">    </property>
+                                 <property name="use_underline">False</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0.5</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkLabel" id="label248">
+                                 <property name="visible">True</property>
+                                 <property name="label" translatable="yes">_Fixed monitor:</property>
+                                 <property name="use_underline">True</property>
+                                 <property name="use_markup">False</property>
+                                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                                 <property name="wrap">False</property>
+                                 <property name="selectable">False</property>
+                                 <property name="xalign">0</property>
+                                 <property name="yalign">0.5</property>
+                                 <property name="xpad">0</property>
+                                 <property name="ypad">0</property>
+                                 <property name="mnemonic_widget">fixed_monitor</property>
+                                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                                 <property name="width_chars">-1</property>
+                                 <property name="single_line_mode">False</property>
+                                 <property name="angle">0</property>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+
+                             <child>
+                               <widget class="GtkSpinButton" id="fixed_monitor">
+                                 <property name="visible">True</property>
+                                 <property name="can_focus">True</property>
+                                 <property name="climb_rate">1</property>
+                                 <property name="digits">0</property>
+                                 <property name="numeric">False</property>
+                                 <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+                                 <property name="snap_to_ticks">False</property>
+                                 <property name="wrap">False</property>
+                                 <property name="adjustment">1 1 100 1 10 10</property>
+                                 <signal name="value_changed" handler="on_fixed_monitor_value_changed" last_modification_time="Mon, 21 Dec 2009 18:32:45 GMT"/>
+                               </widget>
+                               <packing>
+                                 <property name="padding">0</property>
+                                 <property name="expand">False</property>
+                                 <property name="fill">False</property>
+                               </packing>
+                             </child>
+                           </widget>
+                           <packing>
+                             <property name="padding">0</property>
+                             <property name="expand">True</property>
+                             <property name="fill">True</property>
+                           </packing>
+                         </child>
+                       </widget>
+                       <packing>
+                         <property name="padding">0</property>
+                         <property name="expand">True</property>
+                         <property name="fill">True</property>
+                       </packing>
+                     </child>
+                   </widget>
+                   <packing>
+                     <property name="padding">0</property>
+                     <property name="expand">False</property>
+                     <property name="fill">True</property>
+                   </packing>
+                 </child>
+               </widget>
+               <packing>
+                 <property name="padding">0</property>
+                 <property name="expand">False</property>
+                 <property name="fill">True</property>
+               </packing>
+             </child>
            </widget>
            <packing>
              <property name="tab_expand">False</property>
index a0e17c8..2f61fb7 100644 (file)
@@ -10,18 +10,21 @@ static RrFont       *active_window_font   = NULL;
 static RrFont       *inactive_window_font = NULL;
 static RrFont       *menu_title_font      = NULL;
 static RrFont       *menu_item_font       = NULL;
-static RrFont       *osd_font             = NULL;
+static RrFont       *osd_active_font      = NULL;
+static RrFont       *osd_inactive_font    = NULL;
 
 static gboolean update_theme_preview_iterate(gpointer data);
 
 void preview_update_all()
 {
     if (!list_store) return;
+    if (!RR_CHECK_VERSION(3,5,0)) return;
 
     g_idle_remove_by_data(list_store);
 
     if (!(title_layout && active_window_font && inactive_window_font &&
-          menu_title_font && menu_item_font && osd_font))
+          menu_title_font && menu_item_font &&
+          osd_active_font && osd_inactive_font))
         return; /* not set up */
 
     restart_theme_preview_update = TRUE;
@@ -70,10 +73,17 @@ void preview_update_set_menu_item_font(RrFont *f)
     preview_update_all();
 }
 
-void preview_update_set_osd_font(RrFont *f)
+void preview_update_set_osd_active_font(RrFont *f)
 {
-    RrFontClose(osd_font);
-    osd_font = f;
+    RrFontClose(osd_active_font);
+    osd_active_font = f;
+    preview_update_all();
+}
+
+void preview_update_set_osd_inactive_font(RrFont *f)
+{
+    RrFontClose(osd_inactive_font);
+    osd_inactive_font = f;
     preview_update_all();
 }
 
@@ -123,7 +133,8 @@ static gboolean update_theme_preview_iterate(gpointer data)
     gtk_list_store_set(GTK_LIST_STORE(ls), &iter, 1,
                        preview_theme(name, title_layout, active_window_font,
                                      inactive_window_font, menu_title_font,
-                                     menu_item_font, osd_font),
+                                     menu_item_font, osd_active_font,
+                                     osd_inactive_font),
                        -1);
 
     return TRUE;
index 5163174..596f092 100644 (file)
@@ -11,7 +11,8 @@ void preview_update_set_active_font      (RrFont *f);
 void preview_update_set_inactive_font    (RrFont *f);
 void preview_update_set_menu_header_font (RrFont *f);
 void preview_update_set_menu_item_font   (RrFont *f);
-void preview_update_set_osd_font         (RrFont *f);
+void preview_update_set_osd_active_font  (RrFont *f);
+void preview_update_set_osd_inactive_font(RrFont *f);
 void preview_update_set_title_layout     (const gchar *layout);
 
 #endif
index abf39b6..8e24f40 100644 (file)
@@ -45,7 +45,8 @@ gchar *s = N_("_Active window title: ");
 gchar *s = N_("_Inactive window title: ");
 gchar *s = N_("Menu _header: ");
 gchar *s = N_("_Menu Item: ");
-gchar *s = N_("_On-screen display: ");
+gchar *s = N_("Active _On-screen display: ");
+gchar *s = N_("Inactive O_n-screen display: ");
 gchar *s = N_("Appearance");
 gchar *s = N_("<span weight=\"bold\">Focusing Windows</span>");
 gchar *s = N_("    ");
@@ -58,6 +59,15 @@ gchar *s = N_("Prefer to place new windows _on:");
 gchar *s = N_("All monitors");
 gchar *s = N_("The active monitor");
 gchar *s = N_("The monitor with the mouse");
+gchar *s = N_("<span weight=\"bold\">Primary Monitor</span>");
+gchar *s = N_("    ");
+gchar *s = N_("The primary monitor is where Openbox will place dialogs, such as the one used for cycling windows.");
+gchar *s = N_("Primary _monitor:");
+gchar *s = N_("Fixed Monitor");
+gchar *s = N_("Active Monitor");
+gchar *s = N_("Monitor With Mouse Pointer");
+gchar *s = N_("    ");
+gchar *s = N_("_Fixed monitor:");
 gchar *s = N_("Windows");
 gchar *s = N_("<span weight=\"bold\">Moving and Resizing Windows</span>");
 gchar *s = N_("    ");
index ed5ed35..d2b4d96 100644 (file)
@@ -23,6 +23,7 @@
 static gboolean mapping = FALSE;
 
 #define PLACE_ON_ALL    0
+#define PLACE_ON_FIXED 0
 #define PLACE_ON_ACTIVE 1
 #define PLACE_ON_MOUSE 2
 
@@ -59,6 +60,21 @@ void windows_setup_tab()
         gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_ALL);
     g_free(s);
 
+    w = get_widget("primary_monitor_popup");
+    s = tree_get_string("placement/primaryMonitor", "");
+    if (!g_ascii_strcasecmp(s, "Active"))
+        gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_ACTIVE);
+    else if (!g_ascii_strcasecmp(s, "Mouse"))
+        gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_MOUSE);
+    else {
+        gtk_option_menu_set_history(GTK_OPTION_MENU(w), PLACE_ON_FIXED);
+
+        w = get_widget("fixed_monitor");
+        gtk_spin_button_set_value(GTK_SPIN_BUTTON(w),
+                                  tree_get_int("placement/primaryMonitor", 1));
+    }
+    g_free(s);
+
     enable_stuff();
 
     mapping = FALSE;
@@ -71,8 +87,50 @@ static void enable_stuff()
 
     w = get_widget("place_mouse");
     b = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
+
     w = get_widget("place_center");
     gtk_widget_set_sensitive(w, !b);
+
+    w = get_widget("primary_monitor_popup");
+    b = gtk_option_menu_get_history(GTK_OPTION_MENU(w)) == PLACE_ON_FIXED;
+    w = get_widget("fixed_monitor");
+    gtk_widget_set_sensitive(w, b);
+}
+
+void on_primary_monitor_active_activate(GtkMenuItem *w, gpointer data)
+{
+    if (mapping) return;
+
+    tree_set_string("placement/primaryMonitor", "Active");
+    enable_stuff();
+}
+
+void on_primary_monitor_mouse_activate(GtkMenuItem *w, gpointer data)
+{
+    if (mapping) return;
+
+    tree_set_string("placement/primaryMonitor", "Mouse");
+    enable_stuff();
+}
+
+void on_primary_monitor_fixed_activate(GtkMenuItem *w, gpointer data)
+{
+    GtkWidget *w2;
+
+    if (mapping) return;
+
+    w2 = get_widget("fixed_monitor");
+    tree_set_int("placement/primaryMonitor",
+                 gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w2)));
+    enable_stuff();
+}
+
+void on_fixed_monitor_value_changed(GtkSpinButton *w, gpointer data)
+{
+    if (mapping) return;
+
+    tree_set_int("placement/primaryMonitor",
+                 gtk_spin_button_get_value_as_int(w));
 }
 
 void on_focus_new_toggled(GtkToggleButton *w, gpointer data)