$OpenBSD: patch-src_lxrandr_c,v 1.1.1.1 2009/01/23 15:53:27 ajacoutot Exp $
--- src/lxrandr.c.orig	Fri Jan  2 16:25:04 2009
+++ src/lxrandr.c	Fri Jan  2 16:23:24 2009
@@ -62,10 +62,12 @@ static const char* get_human_readable_name( Monitor* m
         return _("Laptop LCD Monitor");
     else if( g_str_has_prefix( m->name, "VGA" ) || g_str_has_prefix( m->name, "Analog" ) )
         return _( LVDS ? "External VGA Monitor" : "VGA Monitor");
-    else if( g_str_has_prefix( m->name, "DVI" ) || g_str_has_prefix(m->name, "TMDS") || g_str_has_prefix(m->name, "Digital") )
+    else if( g_str_has_prefix( m->name, "DVI" ) || g_str_has_prefix(m->name, "TMDS") || g_str_has_prefix(m->name, "Digital") || g_str_has_prefix(m->name, "LVDS") )
         return _( LVDS ? "External DVI Monitor" : "DVI Monitor");
     else if( g_str_has_prefix( m->name, "TV" ) || g_str_has_prefix(m->name, "S-Video") )
         return _("TV");
+    else if( strcmp( m->name, "default" ) == 0 )
+        return _( "Default Monitor");
 
     return m->name;
 }
@@ -91,7 +93,7 @@ static gboolean get_xrandr_info()
         return FALSE;
     }
 
-    regex = g_regex_new( "([A-Z]+[-0-9]*) +connected .*((\n +[0-9]+x[0-9]+[^\n]+)+)",
+    regex = g_regex_new( "([a-zA-Z]+[-0-9]*) +connected .*((\n +[0-9]+x[0-9]+[^\n]+)+)",
                          0, 0, NULL );
     if( g_regex_match( regex, output, 0, &match ) )
     {
@@ -125,8 +127,13 @@ static gboolean get_xrandr_info()
                     {
                         char *star, *plus;
                         str = g_strdup( str );
-                        g_ptr_array_add( strv, str );
 
+                        // sometimes, + goes after a space
+                        if( 0 == strcmp( str, "+" ) )
+                            --irate;
+                        else
+                            g_ptr_array_add( strv, str );
+
                         if( star = strchr( str, '*' ) )
                         {
                             m->active_mode = imode;
@@ -141,7 +148,7 @@ static gboolean get_xrandr_info()
                             *star = '\0';
                         if( plus )
                             *plus = '\0';
-                        ++imode;
+                        ++irate;
                     }
                 }
                 g_ptr_array_add( strv, NULL );
@@ -266,6 +273,12 @@ static void set_xrandr_info()
     g_string_free( cmd, TRUE );
 }
 
+static void choose_max_resolution( Monitor* m )
+{
+    if( gtk_tree_model_iter_n_children( gtk_combo_box_get_model(m->res_combo), NULL ) > 1 )
+        gtk_combo_box_set_active( m->res_combo, 1 );
+}
+
 static void on_quick_option( GtkButton* btn, gpointer data )
 {
     GSList* l;
@@ -276,6 +289,7 @@ static void on_quick_option( GtkButton* btn, gpointer 
         for( l = monitors; l; l = l->next )
         {
             Monitor* m = (Monitor*)l->data;
+            choose_max_resolution( m );
             gtk_toggle_button_set_active( m->enable, TRUE );
         }
         break;
@@ -283,6 +297,7 @@ static void on_quick_option( GtkButton* btn, gpointer 
         for( l = monitors; l; l = l->next )
         {
             Monitor* m = (Monitor*)l->data;
+            choose_max_resolution( m );
             gtk_toggle_button_set_active( m->enable, m != LVDS );
         }
         break;
@@ -290,6 +305,7 @@ static void on_quick_option( GtkButton* btn, gpointer 
         for( l = monitors; l; l = l->next )
         {
             Monitor* m = (Monitor*)l->data;
+            choose_max_resolution( m );
             gtk_toggle_button_set_active( m->enable, m == LVDS );
         }
         break;
@@ -351,7 +367,7 @@ int main(int argc, char** argv)
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL );
     g_signal_connect( dlg, "response", G_CALLBACK(on_response), NULL );
     gtk_container_set_border_width( (GtkContainer*)dlg, 8 );
-    gtk_dialog_set_alternative_button_order( dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL );
+    gtk_dialog_set_alternative_button_order( dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1 );
 
     btn = gtk_button_new_from_stock( GTK_STOCK_ABOUT );
     gtk_box_pack_start( GTK_DIALOG(dlg)->action_area, btn, FALSE, TRUE, 0 );
@@ -415,7 +431,7 @@ int main(int argc, char** argv)
 
         // turn off screen is not allowed since there should be at least one monitor available.
         if( g_slist_length( monitors ) == 1 )
-            gtk_widget_hide( m->enable );
+            gtk_widget_set_sensitive( m->enable, FALSE );
 
         gtk_box_pack_start( hbox, check, FALSE, TRUE, 6 );
         if( m->active_mode >= 0 )
