[Goodies-commits] r3489 - xfvnc/trunk/xfvnc

Brian Tarricone kelnos at xfce.org
Fri Nov 2 10:27:18 CET 2007


Author: kelnos
Date: 2007-11-02 09:27:18 +0000 (Fri, 02 Nov 2007)
New Revision: 3489

Modified:
   xfvnc/trunk/xfvnc/main.c
   xfvnc/trunk/xfvnc/xfvnc.glade
Log:
change comboboxentry to just combobox, implement reading of recent servers
list (doesn't save yet tho)


Modified: xfvnc/trunk/xfvnc/main.c
===================================================================
--- xfvnc/trunk/xfvnc/main.c	2007-11-02 08:54:16 UTC (rev 3488)
+++ xfvnc/trunk/xfvnc/main.c	2007-11-02 09:27:18 UTC (rev 3489)
@@ -33,6 +33,14 @@
 
 #include <vncdisplay.h>
 
+typedef struct
+{
+    gchar *hostname;
+    guint display_num;
+    guint32 view_only:1,
+            allow_other:1,
+            fullscreen:1;
+} XfvncRecentServer;
 
 static void
 vnc_connected(VncDisplay *vnc,
@@ -205,13 +213,140 @@
                       GUINT_TO_POINTER(pulse_id));
 }
 
+static void
+make_text_combo(GtkComboBox *combo)
+{
+    GtkCellRenderer *render;
+    GtkListStore *ls;
+    
+    ls = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
+    gtk_combo_box_set_model(combo, GTK_TREE_MODEL(ls));
+    g_object_unref(G_OBJECT(ls));
+    
+    render = gtk_cell_renderer_text_new();
+    gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), render, TRUE);
+    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), render,
+                                   "text", 0,
+                                   NULL);
+}
+
+/* yes, i know i could use GtkRecentManager and whatnot, but this is
+ * just as easy and doesn't require a really recent gtk */
+static gboolean
+load_recent_servers(GtkComboBox *combo)
+{
+    gboolean ret = FALSE;
+    gchar *recent_file = NULL, groupbuf[128], *fullhost;
+    XfceRc *rcfile = NULL;
+    XfvncRecentServer *rs;
+    gint nrecent, i;
+    GtkListStore *ls;
+    
+    recent_file = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
+                                              "xfvnc/xfvnc-history.rc",
+                                              FALSE);
+    if(!recent_file)
+        goto out;
+    
+    rcfile = xfce_rc_simple_open(recent_file, TRUE);
+    if(!rcfile)
+        goto out;
+    
+    if(!xfce_rc_has_group(rcfile, "global"))
+        goto out;
+    xfce_rc_set_group(rcfile, "global");
+    nrecent = xfce_rc_read_int_entry(rcfile, "nrecent", 0);
+    
+    ls = GTK_LIST_STORE(gtk_combo_box_get_model(combo));
+    
+    for(i = 0; i < nrecent; ++i) {
+        GtkTreeIter iter;
+        
+        g_snprintf(groupbuf, sizeof(groupbuf), "recent%d", i);
+        
+        if(!xfce_rc_has_group(rcfile, groupbuf))
+            continue;
+        xfce_rc_set_group(rcfile, groupbuf);
+        
+        rs = g_new0(XfvncRecentServer, 1);
+        rs->hostname = g_strdup(xfce_rc_read_entry(rcfile, "hostname", NULL));
+        if(!rs->hostname || !*rs->hostname) {
+            g_free(rs->hostname);
+            g_free(rs);
+            continue;
+        }
+        rs->display_num = xfce_rc_read_int_entry(rcfile, "display_num", 0);
+        rs->view_only = xfce_rc_read_bool_entry(rcfile, "view_only", FALSE);
+        rs->allow_other = xfce_rc_read_bool_entry(rcfile, "allow_other", FALSE);
+        rs->fullscreen = xfce_rc_read_bool_entry(rcfile, "fullscreen", FALSE);
+        
+        fullhost = g_strdup_printf("%s:%d", rs->hostname, rs->display_num);
+        
+        gtk_list_store_append(ls, &iter);
+        gtk_list_store_set(ls, &iter,
+                           0, fullhost,
+                           1, rs,
+                           -1);
+        g_free(fullhost);
+    }
+    
+out:
+    if(rcfile)
+        xfce_rc_close(rcfile);
+    g_free(recent_file);
+    
+    return ret;
+}
+
+static void
+recent_combo_changed(GtkComboBox *combo,
+                     gpointer user_data)
+{
+    GladeXML *gxml = user_data;
+    GtkTreeIter iter;
+    GtkTreeModel *model;
+    XfvncRecentServer *rs = NULL;
+    gchar dispbuf[32];
+    
+    if(!gtk_combo_box_get_active_iter(combo, &iter))
+        return;
+    
+    model = gtk_combo_box_get_model(combo);
+    gtk_tree_model_get(model, &iter,
+                       1, &rs,
+                       -1);
+    if(!rs)
+        return;
+    
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_host")),
+                       rs->hostname);
+    
+    g_snprintf(dispbuf, sizeof(dispbuf), "%d", rs->display_num);
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml,
+                                                      "entry_displaynum")),
+                       dispbuf);
+    
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_password")),
+                       "");
+    
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+                                                                        "chk_viewonly")),
+                                 rs->view_only);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+                                                                        "chk_allowother")),
+                                 rs->allow_other);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+                                                                        "chk_fullscreen")),
+                                 rs->fullscreen);
+}
+
 int
 main(int argc,
      char **argv)
 {
     GladeXML *gxml;
     gchar *glade_file;
-    GtkWidget *connect_window;
+    GtkWidget *connect_window, *combo_recent, *entry_host;
     
     xfce_textdomain(GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
     
@@ -225,6 +360,7 @@
         g_error("Unable to load xfvnc.glade");
         return 1;
     }
+    g_free(glade_file);
     
     glade_xml_signal_autoconnect(gxml);
     
@@ -233,8 +369,15 @@
     g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml, "btn_connect")),
                      "clicked", G_CALLBACK(connect_clicked), gxml);
     
-    g_free(glade_file);
+    combo_recent = glade_xml_get_widget(gxml, "combo_recent");
+    make_text_combo(GTK_COMBO_BOX(combo_recent));
+    load_recent_servers(GTK_COMBO_BOX(combo_recent));
+    g_signal_connect(G_OBJECT(combo_recent), "changed",
+                     G_CALLBACK(recent_combo_changed), gxml);
     
+    entry_host = glade_xml_get_widget(gxml, "entry_host");
+    gtk_widget_grab_focus(entry_host);
+    
     gtk_main();
     
     g_object_unref(G_OBJECT(gxml));

Modified: xfvnc/trunk/xfvnc/xfvnc.glade
===================================================================
--- xfvnc/trunk/xfvnc/xfvnc.glade	2007-11-02 08:54:16 UTC (rev 3488)
+++ xfvnc/trunk/xfvnc/xfvnc.glade	2007-11-02 09:27:18 UTC (rev 3489)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.2.2 on Fri Nov  2 01:40:52 2007 by brian at kepler-->
+<!--Generated with glade3 3.2.2 on Fri Nov  2 01:58:13 2007 by brian at kepler-->
 <glade-interface>
   <widget class="GtkWindow" id="connect_window">
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -21,7 +21,7 @@
               <widget class="GtkLabel" id="label1">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="label" translatable="yes">_Recent servers:</property>
+                <property name="label" translatable="yes">_Recent computers:</property>
                 <property name="use_underline">True</property>
                 <property name="mnemonic_widget">comboboxentry1</property>
               </widget>
@@ -31,16 +31,10 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkComboBoxEntry" id="comboboxentry1">
+              <widget class="GtkComboBox" id="combo_recent">
                 <property name="visible">True</property>
                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <child internal-child="entry">
-                  <widget class="GtkEntry" id="comboboxentry-entry1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                  </widget>
-                </child>
+                <property name="focus_on_click">False</property>
               </widget>
               <packing>
                 <property name="position">1</property>




More information about the Goodies-commits mailing list