[Goodies-commits] r3586 - xfvnc/trunk/xfvnc
Brian Tarricone
kelnos at xfce.org
Mon Nov 12 02:14:08 CET 2007
Author: kelnos
Date: 2007-11-12 01:14:08 +0000 (Mon, 12 Nov 2007)
New Revision: 3586
Modified:
xfvnc/trunk/xfvnc/main.c
Log:
refactor some stuff, set vnc window's max size to remote display size
Modified: xfvnc/trunk/xfvnc/main.c
===================================================================
--- xfvnc/trunk/xfvnc/main.c 2007-11-11 19:57:02 UTC (rev 3585)
+++ xfvnc/trunk/xfvnc/main.c 2007-11-12 01:14:08 UTC (rev 3586)
@@ -25,6 +25,10 @@
#include <stdlib.h>
#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
#include <gtk/gtk.h>
#include <glade/glade.h>
@@ -49,16 +53,30 @@
guint32 view_only:1,
allow_other:1,
fullscreen:1;
-} XfvncRecentServer;
+} XfvncServerInfo;
+typedef struct
+{
+ GladeXML *gxml;
+
+ GtkWidget *vnc_window;
+ GtkWidget *vnc_window_sw;
+ GtkWidget *vnc;
+
+ guint pulse_id;
+
+ XfvncServerInfo server;
+} XfvncData;
+
+
static void
vnc_connected(VncDisplay *vnc,
gpointer user_data)
{
- GladeXML *gxml = user_data;
+ XfvncData *xfvnc = user_data;
GtkWidget *lbl_progress;
- lbl_progress = glade_xml_get_widget(gxml, "progress_label");
+ lbl_progress = glade_xml_get_widget(xfvnc->gxml, "progress_label");
gtk_label_set_text(GTK_LABEL(lbl_progress),
_("Connected. Starting session..."));
}
@@ -67,16 +85,15 @@
vnc_initialized(VncDisplay *vnc,
gpointer user_data)
{
- GladeXML *gxml = user_data;
- GtkWidget *win, /**sw,*/ *connect_win, *progress_dlg, *chk_fullscreen;
- guint pulse_id;
+ XfvncData *xfvnc = user_data;
+ GladeXML *gxml = xfvnc->gxml;
+ GtkWidget *connect_win, *progress_dlg, *chk_fullscreen;
gboolean fullscreen;
gchar *title;
progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
- pulse_id = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(progress_dlg),
- "pulse-timeout-id"));
- g_source_remove(pulse_id);
+ g_source_remove(xfvnc->pulse_id);
+ xfvnc->pulse_id = 0;
gtk_widget_destroy(progress_dlg);
chk_fullscreen = glade_xml_get_widget(gxml, "chk_fullscreen");
@@ -85,14 +102,13 @@
connect_win = glade_xml_get_widget(gxml, "connect_window");
gtk_widget_destroy(connect_win);
- win = glade_xml_get_widget(gxml, "vnc_window");
title = g_strdup_printf(_("XfVNC .:. %s"), vnc_display_get_name(vnc));
- gtk_window_set_title(GTK_WINDOW(win), title);
+ gtk_window_set_title(GTK_WINDOW(xfvnc->vnc_window), title);
g_free(title);
- gtk_widget_show_all(win);
+ gtk_widget_show_all(xfvnc->vnc_window);
if(fullscreen)
- gtk_window_fullscreen(GTK_WINDOW(win));
+ gtk_window_fullscreen(GTK_WINDOW(xfvnc->vnc_window));
#if 0
/* this is super-lame */
@@ -123,10 +139,9 @@
vnc_disconnected(VncDisplay *vnc,
gpointer user_data)
{
- GladeXML *gxml = user_data;
- GtkWidget *win = glade_xml_get_widget(gxml, "vnc_window");
+ XfvncData *xfvnc = user_data;
- xfce_message_dialog(GTK_WINDOW(win), _("Disconnected"),
+ xfce_message_dialog(GTK_WINDOW(xfvnc->vnc_window), _("Disconnected"),
GTK_STOCK_DIALOG_ERROR,
_("The remote VNC session was disconnected"),
_("The connection with the VNC server was lost. This could be due to a network problem, or a problem with the server."),
@@ -140,9 +155,14 @@
const gchar *message,
gpointer user_data)
{
- GladeXML *gxml = user_data;
- GtkWidget *progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
+ XfvncData *xfvnc = user_data;
+ GtkWidget *progress_dlg = glade_xml_get_widget(xfvnc->gxml, "progress_dlg");
+ if(xfvnc->pulse_id) {
+ g_source_remove(xfvnc->pulse_id);
+ xfvnc->pulse_id = 0;
+ }
+
xfce_message_dialog(GTK_WINDOW(progress_dlg), _("Connection Error"),
GTK_STOCK_DIALOG_ERROR,
_("There was an error connecting to the VNC server"),
@@ -158,11 +178,19 @@
gint height,
gpointer user_data)
{
- GladeXML *gxml = user_data;
- GtkWidget *win;
+ XfvncData *xfvnc = user_data;
+ GdkGeometry geom = { 0, };
- win = glade_xml_get_widget(gxml, "vnc_window");
- gtk_window_resize(GTK_WINDOW(win), width, height);
+ TRACE("entering (%d,%d)", width, height);
+
+ geom.max_width = width;
+ geom.max_height = height;
+ /* FIXME: why doesn't it work to pass |vnc| as the geometry widget? */
+ gtk_window_set_geometry_hints(GTK_WINDOW(xfvnc->vnc_window),
+ xfvnc->vnc_window_sw, &geom,
+ GDK_HINT_MAX_SIZE);
+
+ gtk_window_resize(GTK_WINDOW(xfvnc->vnc_window), width, height);
}
static gboolean
@@ -177,27 +205,24 @@
progress_cancel_clicked(GtkWidget *widget,
gpointer user_data)
{
- GladeXML *gxml = user_data;
- GtkWidget *progress_dlg, *win, *vnc, *btn;
- guint pulse_id;
-
+ XfvncData *xfvnc = user_data;
+ GladeXML *gxml = xfvnc->gxml;
+ GtkWidget *progress_dlg, *btn;
+
progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
- pulse_id = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(progress_dlg),
- "pulse-timeout-id"));
- g_source_remove(pulse_id);
+ g_source_remove(xfvnc->pulse_id);
+ xfvnc->pulse_id = 0;
gtk_widget_hide(progress_dlg);
- win = glade_xml_get_widget(gxml, "vnc_window");
- vnc = g_object_get_data(G_OBJECT(win), "vnc-display");
- g_object_unref(G_OBJECT(vnc));
- gtk_widget_destroy(vnc);
- g_object_set_data(G_OBJECT(win), "vnc-display", NULL);
- gtk_widget_hide(win);
+ g_object_unref(G_OBJECT(xfvnc->vnc));
+ gtk_widget_destroy(xfvnc->vnc);
+ xfvnc->vnc = NULL;
+ gtk_widget_hide(xfvnc->vnc_window);
btn = glade_xml_get_widget(gxml, "btn_progress_cancel");
g_signal_handlers_disconnect_by_func(G_OBJECT(btn),
G_CALLBACK(progress_cancel_clicked),
- gxml);
+ xfvnc);
}
static gboolean
@@ -205,9 +230,9 @@
GdkEventAny *event,
gpointer user_data)
{
- GtkWidget *vnc = g_object_get_data(G_OBJECT(widget), "vnc-display");
+ XfvncData *xfvnc = user_data;
- g_signal_handlers_disconnect_by_func(G_OBJECT(vnc),
+ g_signal_handlers_disconnect_by_func(G_OBJECT(xfvnc->vnc),
G_CALLBACK(vnc_disconnected),
user_data);
@@ -218,57 +243,59 @@
connect_clicked(GtkWidget *widget,
gpointer user_data)
{
- GladeXML *gxml = user_data;
+ XfvncData *xfvnc = user_data;
+ GladeXML *gxml = xfvnc->gxml;
GtkWidget *win, *sw, *vnc, *entry_host, *entry_displaynum, *entry_password;
GtkWidget *progress_dlg;
- gchar *host, *dnum, *pass, *port;
- guint pulse_id;
+ gchar *dnum, *port, *password;
entry_host = glade_xml_get_widget(gxml, "entry_host");
- host = gtk_editable_get_chars(GTK_EDITABLE(entry_host), 0, -1);
+ xfvnc->server.hostname = gtk_editable_get_chars(GTK_EDITABLE(entry_host),
+ 0, -1);
entry_displaynum = glade_xml_get_widget(gxml, "entry_displaynum");
dnum = gtk_editable_get_chars(GTK_EDITABLE(entry_displaynum), 0, -1);
entry_password = glade_xml_get_widget(gxml, "entry_password");
- pass = gtk_editable_get_chars(GTK_EDITABLE(entry_password), 0, -1);
+ password = gtk_editable_get_chars(GTK_EDITABLE(entry_password), 0, -1);
- port = g_strdup_printf("%d", 5900 + atoi(dnum));
+ xfvnc->server.display_num = atoi(dnum);
+ port = g_strdup_printf("%d", 5900 + xfvnc->server.display_num);
g_free(dnum);
- win = glade_xml_get_widget(gxml, "vnc_window");
+ xfvnc->vnc_window = win = glade_xml_get_widget(gxml, "vnc_window");
gtk_widget_set_name(win, "xfvnc-nothick-window");
gtk_widget_realize(win);
g_signal_connect(G_OBJECT(win), "delete-event",
- G_CALLBACK(vnc_window_delete_event), gxml);
+ G_CALLBACK(vnc_window_delete_event), xfvnc);
- sw = glade_xml_get_widget(gxml, "vnc_window_sw");
+ xfvnc->vnc_window_sw = sw = glade_xml_get_widget(gxml, "vnc_window_sw");
gtk_widget_show(sw);
- vnc = vnc_display_new();
+ xfvnc->vnc = vnc = vnc_display_new();
vnc_display_set_use_shm(VNC_DISPLAY(vnc), TRUE);
vnc_display_set_pointer_local(VNC_DISPLAY(vnc), TRUE);
vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), FALSE);
vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), FALSE);
vnc_display_set_credential(VNC_DISPLAY(vnc),
VNC_DISPLAY_CREDENTIAL_CLIENTNAME,
- "XfVNC");
+ "XfVNC " VERSION);
vnc_display_set_credential(VNC_DISPLAY(vnc),
VNC_DISPLAY_CREDENTIAL_PASSWORD,
- pass);
- vnc_display_open_host(VNC_DISPLAY(vnc), host, port);
+ password);
+ vnc_display_open_host(VNC_DISPLAY(vnc), xfvnc->server.hostname, port);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vnc);
gtk_widget_realize(vnc);
g_object_set_data(G_OBJECT(win), "vnc-display",
g_object_ref(G_OBJECT(vnc)));
g_signal_connect(G_OBJECT(vnc), "vnc-connected",
- G_CALLBACK(vnc_connected), gxml);
+ G_CALLBACK(vnc_connected), xfvnc);
g_signal_connect(G_OBJECT(vnc), "vnc-initialized",
- G_CALLBACK(vnc_initialized), gxml);
+ G_CALLBACK(vnc_initialized), xfvnc);
g_signal_connect(G_OBJECT(vnc), "vnc-disconnected",
- G_CALLBACK(vnc_disconnected), gxml);
+ G_CALLBACK(vnc_disconnected), xfvnc);
g_signal_connect(G_OBJECT(vnc), "vnc-auth-failure",
- G_CALLBACK(vnc_auth_failure),gxml);
+ G_CALLBACK(vnc_auth_failure), xfvnc);
g_signal_connect(G_OBJECT(vnc), "vnc-desktop-resize",
- G_CALLBACK(vnc_desktop_resize), gxml);
+ G_CALLBACK(vnc_desktop_resize), xfvnc);
g_signal_connect(G_OBJECT(vnc), "vnc-keyboard-grab",
G_CALLBACK(vnc_display_set_keyboard_grab),
GUINT_TO_POINTER(FALSE));
@@ -276,20 +303,16 @@
G_CALLBACK(vnc_display_set_pointer_grab),
GUINT_TO_POINTER(FALSE));
- g_free(host);
- g_free(port);
- g_free(pass);
+ g_free(password);
progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
gtk_widget_show_all(progress_dlg);
g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml,
"btn_progress_cancel")),
- "clicked", G_CALLBACK(progress_cancel_clicked), gxml);
+ "clicked", G_CALLBACK(progress_cancel_clicked), xfvnc);
- pulse_id = g_timeout_add(150, progress_pulse,
- glade_xml_get_widget(gxml, "pbar"));
- g_object_set_data(G_OBJECT(progress_dlg), "pulse-timeout-id",
- GUINT_TO_POINTER(pulse_id));
+ xfvnc->pulse_id = g_timeout_add(150, progress_pulse,
+ glade_xml_get_widget(gxml, "pbar"));
}
static void
@@ -315,7 +338,7 @@
gboolean got_one = FALSE;
gchar *recent_file = NULL, groupbuf[128], *fullhost;
XfceRc *rcfile = NULL;
- XfvncRecentServer *rs;
+ XfvncServerInfo *si;
gint nrecent, i;
GtkListStore *ls;
@@ -345,24 +368,24 @@
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);
+ si = g_new0(XfvncServerInfo, 1);
+ si->hostname = g_strdup(xfce_rc_read_entry(rcfile, "hostname", NULL));
+ if(!si->hostname || !*si->hostname) {
+ g_free(si->hostname);
+ g_free(si);
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);
+ si->display_num = xfce_rc_read_int_entry(rcfile, "display_num", 0);
+ si->view_only = xfce_rc_read_bool_entry(rcfile, "view_only", FALSE);
+ si->allow_other = xfce_rc_read_bool_entry(rcfile, "allow_other", FALSE);
+ si->fullscreen = xfce_rc_read_bool_entry(rcfile, "fullscreen", FALSE);
- fullhost = g_strdup_printf("%s:%d", rs->hostname, rs->display_num);
+ fullhost = g_strdup_printf("%s:%d", si->hostname, si->display_num);
gtk_list_store_append(ls, &iter);
gtk_list_store_set(ls, &iter,
0, fullhost,
- 1, rs,
+ 1, si,
-1);
g_free(fullhost);
got_one = TRUE;
@@ -380,10 +403,10 @@
recent_combo_changed(GtkComboBox *combo,
gpointer user_data)
{
- GladeXML *gxml = user_data;
+ XfvncData *xfvnc = user_data;
GtkTreeIter iter;
GtkTreeModel *model;
- XfvncRecentServer *rs = NULL;
+ XfvncServerInfo *si = NULL;
gchar dispbuf[32];
if(!gtk_combo_box_get_active_iter(combo, &iter))
@@ -391,37 +414,39 @@
model = gtk_combo_box_get_model(combo);
gtk_tree_model_get(model, &iter,
- 1, &rs,
+ 1, &si,
-1);
- if(!rs)
+ if(!si)
return;
- gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_host")),
- rs->hostname);
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
+ "entry_host")),
+ si->hostname);
- g_snprintf(dispbuf, sizeof(dispbuf), "%d", rs->display_num);
- gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml,
+ g_snprintf(dispbuf, sizeof(dispbuf), "%d", si->display_num);
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
"entry_displaynum")),
dispbuf);
- gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_password")),
- "");
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
+ "entry_password")), "");
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
"chk_viewonly")),
- rs->view_only);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ si->view_only);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
"chk_allowother")),
- rs->allow_other);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ si->allow_other);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
"chk_fullscreen")),
- rs->fullscreen);
+ si->fullscreen);
}
int
main(int argc,
char **argv)
{
+ XfvncData xfvnc;
GladeXML *gxml;
GtkWidget *connect_window, *combo_recent;
@@ -430,8 +455,11 @@
gtk_init(&argc, &argv);
gtk_rc_parse_string(rcstyle);
- gxml = glade_xml_new_from_buffer(xfvnc_glade, xfvnc_glade_length,
- NULL, NULL);
+ memset(&xfvnc, 0, sizeof(xfvnc));
+
+ xfvnc.gxml = gxml = glade_xml_new_from_buffer(xfvnc_glade,
+ xfvnc_glade_length,
+ NULL, NULL);
if(!gxml) {
g_error("Unable to parse embedded glade UI description.");
return 1;
@@ -442,12 +470,12 @@
connect_window = glade_xml_get_widget(gxml, "connect_window");
gtk_widget_show_all(connect_window);
g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml, "btn_connect")),
- "clicked", G_CALLBACK(connect_clicked), gxml);
+ "clicked", G_CALLBACK(connect_clicked), &xfvnc);
combo_recent = glade_xml_get_widget(gxml, "combo_recent");
make_text_combo(GTK_COMBO_BOX(combo_recent));
g_signal_connect(G_OBJECT(combo_recent), "changed",
- G_CALLBACK(recent_combo_changed), gxml);
+ G_CALLBACK(recent_combo_changed), &xfvnc);
if(load_recent_servers(GTK_COMBO_BOX(combo_recent))) {
gtk_combo_box_set_active(GTK_COMBO_BOX(combo_recent), 0);
gtk_widget_grab_focus(glade_xml_get_widget(gxml, "entry_password"));
More information about the Goodies-commits
mailing list