vinagre r270 - branches/unstable/src
- From: jwendell svn gnome org
- To: svn-commits-list gnome org
- Subject: vinagre r270 - branches/unstable/src
- Date: Fri, 21 Mar 2008 13:17:50 +0000 (GMT)
Author: jwendell
Date: Fri Mar 21 13:17:50 2008
New Revision: 270
URL: http://svn.gnome.org/viewvc/vinagre?rev=270&view=rev
Log:
Make bookmarks a GObject
Modified:
branches/unstable/src/vinagre-bookmarks.c
branches/unstable/src/vinagre-bookmarks.h
branches/unstable/src/vinagre-commands.c
branches/unstable/src/vinagre-connect.c
branches/unstable/src/vinagre-connection.c
branches/unstable/src/vinagre-fav.c
branches/unstable/src/vinagre-fav.h
branches/unstable/src/vinagre-window-private.h
branches/unstable/src/vinagre-window.c
branches/unstable/src/vinagre-window.h
Modified: branches/unstable/src/vinagre-bookmarks.c
==============================================================================
--- branches/unstable/src/vinagre-bookmarks.c (original)
+++ branches/unstable/src/vinagre-bookmarks.c Fri Mar 21 13:17:50 2008
@@ -2,7 +2,7 @@
* vinagre-bookmarks.c
* This file is part of vinagre
*
- * Copyright (C) 2007 Jonh Wendell <wendell bani com br>
+ * Copyright (C) 2007,2008 Jonh Wendell <wendell bani com br>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -26,105 +26,153 @@
#include <glade/glade.h>
#include <string.h>
-#define VINAGRE_FAVORITES_FILE "vinagre.bookmarks"
+struct _VinagreBookmarksPrivate
+{
+ GKeyFile *file;
+ GSList *conns;
+};
-GKeyFile *bookmarks = NULL;
+enum
+{
+ BOOKMARK_CHANGED,
+ LAST_SIGNAL
+};
+
+#define VINAGRE_BOOKMARKS_FILE "vinagre.bookmarks"
+#define VINAGRE_CONNECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VINAGRE_TYPE_CONNECTION, VinagreConnectionPrivate))
+G_DEFINE_TYPE (VinagreBookmarks, vinagre_bookmarks, G_TYPE_OBJECT);
+
+static VinagreBookmarks *book_singleton = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+/* Prototypes */
+static void vinagre_bookmarks_init_file (VinagreBookmarks *book);
+static void vinagre_bookmarks_update_conns (VinagreBookmarks *book);
+static void vinagre_bookmarks_save_file (VinagreBookmarks *book);
+static void vinagre_bookmarks_clear_conns (VinagreBookmarks *book);
-static gchar *
-filename (void)
+
+static void
+vinagre_bookmarks_init (VinagreBookmarks *book)
{
- return g_build_filename (g_get_home_dir (),
- ".gnome2",
- VINAGRE_FAVORITES_FILE,
- NULL);
+ book->priv = G_TYPE_INSTANCE_GET_PRIVATE (book, VINAGRE_TYPE_BOOKMARKS, VinagreBookmarksPrivate);
+
+ book->priv->conns = NULL;
+
+ vinagre_bookmarks_init_file (book);
+ vinagre_bookmarks_update_conns (book);
}
static void
-vinagre_bookmarks_save_file (void)
+vinagre_bookmarks_finalize (GObject *object)
{
- gchar *file;
- gchar *data;
- gsize length;
- GError *error;
+ VinagreBookmarks *book = VINAGRE_BOOKMARKS (object);
- error = NULL;
- data = g_key_file_to_data (bookmarks,
- &length,
- &error);
- if (!data)
- {
- if (error)
- {
- g_warning (_("Error while saving bookmarks: %s"), error->message);
- g_error_free (error);
- }
+ g_key_file_free (book->priv->file);
+ book->priv->file = NULL;
+ vinagre_bookmarks_clear_conns (book);
- return;
+ G_OBJECT_CLASS (vinagre_bookmarks_parent_class)->finalize (object);
+}
- }
+static void
+vinagre_bookmarks_class_init (VinagreBookmarksClass *klass)
+{
+ GObjectClass* object_class = G_OBJECT_CLASS (klass);
+ GObjectClass* parent_class = G_OBJECT_CLASS (klass);
- file = filename ();
- error = NULL;
+ g_type_class_add_private (klass, sizeof (VinagreBookmarksPrivate));
- if (!g_file_set_contents (file,
- data,
- length,
- &error))
- {
- if (error)
- {
- g_warning (_("Error while saving bookmarks: %s"), error->message);
- g_error_free (error);
- }
- }
+ object_class->finalize = vinagre_bookmarks_finalize;
- g_free (file);
- g_free (data);
+ signals[BOOKMARK_CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (VinagreBookmarksClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
}
-void
-vinagre_bookmarks_init (void)
+VinagreBookmarks *
+vinagre_bookmarks_get_default (void)
{
- gchar *file;
- gboolean loaded;
- GError *error;
-
- g_return_if_fail (bookmarks == NULL);
+ if (G_UNLIKELY (!book_singleton))
+ book_singleton = VINAGRE_BOOKMARKS (g_object_new (VINAGRE_TYPE_BOOKMARKS,
+ NULL));
+ return book_singleton;
+}
- bookmarks = g_key_file_new ();
+static VinagreConnection *
+vinagre_bookmarks_find_conn (VinagreBookmarks *book,
+ VinagreConnection *conn)
+{
+ GSList *l, *next;
- loaded = FALSE;
- error = NULL;
+ for (l = book->priv->conns; l; l = next)
+ {
+ VinagreConnection *local = VINAGRE_CONNECTION (l->data);
- file = filename ();
- if (g_file_test (file, G_FILE_TEST_EXISTS))
- loaded = g_key_file_load_from_file (bookmarks,
- file,
- G_KEY_FILE_NONE,
- &error);
- g_free (file);
+ if ( (g_str_equal (vinagre_connection_get_host (conn),
+ vinagre_connection_get_host (local)))
+ &&
+ (vinagre_connection_get_port (conn) == vinagre_connection_get_port (local) ) )
+ return local;
- if (!loaded)
- {
- if (error)
- {
- g_warning (_("Error while initializing bookmarks: %s"), error->message);
- g_error_free (error);
- }
+ next = l->next;
}
+
+ return NULL;
}
-void
-vinagre_bookmarks_finalize (void)
+static void
+vinagre_bookmarks_add_conn (VinagreBookmarks *book,
+ VinagreConnection *conn)
{
- g_return_if_fail (bookmarks != NULL);
+ book->priv->conns = g_slist_prepend (book->priv->conns,
+ vinagre_connection_clone (conn));
+ vinagre_bookmarks_save_file (book);
+}
+
+static void
+vinagre_bookmarks_edit_conn (VinagreBookmarks *book,
+ VinagreConnection *old_conn,
+ VinagreConnection *conn)
+{
+ VinagreConnection *local = vinagre_bookmarks_find_conn (book, old_conn);
+
+ g_return_if_fail (VINAGRE_IS_CONNECTION (local));
+
+ g_object_unref (local);
+ book->priv->conns = g_slist_remove (book->priv->conns,
+ local);
+ book->priv->conns = g_slist_prepend (book->priv->conns,
+ vinagre_connection_clone (conn));
+
+ vinagre_bookmarks_save_file (book);
+}
+
+static void
+vinagre_bookmarks_del_conn (VinagreBookmarks *book,
+ VinagreConnection *conn)
+{
+ VinagreConnection *local = vinagre_bookmarks_find_conn (book, conn);
+
+ g_return_if_fail (VINAGRE_IS_CONNECTION (local));
- g_key_file_free (bookmarks);
+ book->priv->conns = g_slist_remove (book->priv->conns,
+ local);
+ g_object_unref (local);
+
+ vinagre_bookmarks_save_file (book);
}
gboolean
-vinagre_bookmarks_add (VinagreConnection *conn,
- VinagreWindow *window)
+vinagre_bookmarks_add (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window)
{
gint result;
GladeXML *xml;
@@ -132,13 +180,13 @@
GtkWidget *dialog;
const gchar *name;
+ g_return_val_if_fail (VINAGRE_IS_BOOKMARKS (book), FALSE);
g_return_val_if_fail (VINAGRE_IS_CONNECTION (conn), FALSE);
- g_return_val_if_fail (VINAGRE_IS_WINDOW (window), FALSE);
glade_file = vinagre_utils_get_glade_filename ();
xml = glade_xml_new (glade_file, "add_to_bookmarks_dialog", NULL);
dialog = glade_xml_get_widget (xml, "add_to_bookmarks_dialog");
- gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(window));
+ gtk_window_set_transient_for (GTK_WINDOW(dialog), window);
gtk_widget_show_all (dialog);
@@ -150,17 +198,17 @@
if (strlen(name) < 1)
name = vinagre_connection_get_host (conn);
- g_key_file_set_string (bookmarks,
+ g_key_file_set_string (book->priv->file,
name,
"host",
vinagre_connection_get_host (conn));
- g_key_file_set_integer (bookmarks,
+ g_key_file_set_integer (book->priv->file,
name,
"port",
vinagre_connection_get_port (conn));
vinagre_connection_set_name (conn, name);
- vinagre_bookmarks_save_file ();
+ vinagre_bookmarks_add_conn (book, conn);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
@@ -170,22 +218,22 @@
}
gboolean
-vinagre_bookmarks_edit (VinagreConnection *conn,
- VinagreWindow *window)
+vinagre_bookmarks_edit (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window)
{
gint result;
GladeXML *xml;
const gchar *glade_file;
GtkWidget *dialog, *host_entry, *name_entry, *port_entry;
- const gchar *name;
+ g_return_val_if_fail (VINAGRE_IS_BOOKMARKS (book), FALSE);
g_return_val_if_fail (VINAGRE_IS_CONNECTION (conn), FALSE);
- g_return_val_if_fail (VINAGRE_IS_WINDOW (window), FALSE);
glade_file = vinagre_utils_get_glade_filename ();
xml = glade_xml_new (glade_file, "edit_bookmark_dialog", NULL);
dialog = glade_xml_get_widget (xml, "edit_bookmark_dialog");
- gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(window));
+ gtk_window_set_transient_for (GTK_WINDOW(dialog), window);
name_entry = glade_xml_get_widget (xml, "edit_bookmark_name_entry");
host_entry = glade_xml_get_widget (xml, "edit_bookmark_host_entry");
@@ -201,27 +249,33 @@
if (result == GTK_RESPONSE_OK)
{
+ const gchar *name;
+ VinagreConnection *old_conn = vinagre_connection_clone (conn);
- g_key_file_remove_group (bookmarks, vinagre_connection_get_name (conn), NULL);
+ g_key_file_remove_group (book->priv->file, vinagre_connection_get_name (conn), NULL);
name = gtk_entry_get_text (GTK_ENTRY (name_entry));
vinagre_connection_set_host (conn, gtk_entry_get_text (GTK_ENTRY (host_entry)));
vinagre_connection_set_port (conn, gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (port_entry)));
- if (strlen(vinagre_connection_get_name (conn)) < 1)
- name = vinagre_connection_get_host (conn);
+ if (strlen (name) < 1)
+ if (strlen(vinagre_connection_get_name (conn)) < 1)
+ name = vinagre_connection_get_host (conn);
+ else
+ name = vinagre_connection_get_name (conn);
- g_key_file_set_string (bookmarks,
+ g_key_file_set_string (book->priv->file,
name,
"host",
vinagre_connection_get_host (conn));
- g_key_file_set_integer (bookmarks,
+ g_key_file_set_integer (book->priv->file,
name,
"port",
vinagre_connection_get_port (conn));
vinagre_connection_set_name (conn, name);
- vinagre_bookmarks_save_file ();
+ vinagre_bookmarks_edit_conn (book, old_conn, conn);
+ g_object_unref (old_conn);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
@@ -230,59 +284,27 @@
return (result == GTK_RESPONSE_OK);
}
-GList *
-vinagre_bookmarks_get_all (void)
-{
- GList *list = NULL;
- gsize length, i;
- gchar **conns;
- VinagreConnection *conn;
- gchar *s_value;
- gint i_value;
-
- g_return_val_if_fail (bookmarks != NULL, NULL);
-
- conns = g_key_file_get_groups (bookmarks, &length);
- for (i=0; i<length; i++)
- {
- conn = vinagre_connection_new ();
- vinagre_connection_set_name (conn, conns[i]);
-
- s_value = g_key_file_get_string (bookmarks, conns[i], "host", NULL);
- vinagre_connection_set_host (conn, s_value);
- g_free (s_value);
-
- i_value = g_key_file_get_integer (bookmarks, conns[i], "port", NULL);
- vinagre_connection_set_port (conn, i_value);
-
- list = g_list_append (list, conn);
- }
- g_strfreev (conns);
-
- return list;
-}
-
gboolean
-vinagre_bookmarks_del (VinagreConnection *conn,
- VinagreWindow *window)
+vinagre_bookmarks_del (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window)
{
gint result;
GtkWidget *dialog;
gchar *name;
GError *error = NULL;
- g_return_val_if_fail (bookmarks != NULL, FALSE);
+ g_return_val_if_fail (VINAGRE_IS_BOOKMARKS (book), FALSE);
g_return_val_if_fail (VINAGRE_IS_CONNECTION (conn), FALSE);
- g_return_val_if_fail (VINAGRE_IS_WINDOW (window), FALSE);
name = vinagre_connection_get_best_name (conn);
- if (!g_key_file_has_group (bookmarks, name))
+ if (!g_key_file_has_group (book->priv->file, name))
{
g_free (name);
return FALSE;
}
- dialog = gtk_message_dialog_new (GTK_WINDOW (window),
+ dialog = gtk_message_dialog_new (window,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_OK_CANCEL,
@@ -297,7 +319,7 @@
if (result == GTK_RESPONSE_OK)
{
- g_key_file_remove_group (bookmarks, name, &error);
+ g_key_file_remove_group (book->priv->file, name, &error);
if (error)
{
g_warning (_("Error while removing %s from bookmarks: %s"),
@@ -307,7 +329,7 @@
g_free (name);
return FALSE;
}
- vinagre_bookmarks_save_file ();
+ vinagre_bookmarks_del_conn (book, conn);
}
g_free (name);
@@ -315,49 +337,161 @@
}
VinagreConnection *
-vinagre_bookmarks_exists (const char *host, int port)
+vinagre_bookmarks_exists (VinagreBookmarks *book,
+ const gchar *host,
+ gint port)
{
VinagreConnection *conn = NULL;
- gsize length, i;
- gchar **conns = NULL;
- gchar *s_host = NULL;
- gint i_port;
+ GSList *l, *next;
- g_return_val_if_fail (bookmarks != NULL, NULL);
+ g_return_val_if_fail (VINAGRE_IS_BOOKMARKS (book), NULL);
- conns = g_key_file_get_groups (bookmarks, &length);
- for (i=0; i<length; i++)
+ for (l = book->priv->conns; l; l = next)
{
- s_host = g_key_file_get_string (bookmarks, conns[i], "host", NULL);
- i_port = g_key_file_get_integer (bookmarks, conns[i], "port", NULL);
+ VinagreConnection *con = VINAGRE_CONNECTION (l->data);
- if ( (g_str_equal (host, s_host)) && (port == i_port) )
- {
- conn = vinagre_connection_new ();
- vinagre_connection_set_name (conn, conns[i]);
+ if ( (g_str_equal (host, vinagre_connection_get_host (con))) &&
+ (port == vinagre_connection_get_port (con) ) )
+ {
+ conn = vinagre_connection_clone (con);
+ break;
+ }
+ next = l->next;
+ }
+
+ return conn;
+}
+
+GSList *
+vinagre_bookmarks_get_all (VinagreBookmarks *book)
+{
+ g_return_val_if_fail (VINAGRE_IS_BOOKMARKS (book), NULL);
+
+ return book->priv->conns;
+}
+
+static gchar *
+filename (void)
+{
+ return g_build_filename (g_get_home_dir (),
+ ".gnome2",
+ VINAGRE_BOOKMARKS_FILE,
+ NULL);
+}
- vinagre_connection_set_host (conn, host);
- vinagre_connection_set_port (conn, port);
+static void
+vinagre_bookmarks_init_file (VinagreBookmarks *book)
+{
+ gchar *file;
+ gboolean loaded = TRUE;
+ GError *error = NULL;
- g_free (s_host);
- s_host = NULL;
+ book->priv->file = g_key_file_new ();
- break;
+ file = filename ();
+
+ if (g_file_test (file, G_FILE_TEST_EXISTS))
+ loaded = g_key_file_load_from_file (book->priv->file,
+ file,
+ G_KEY_FILE_NONE,
+ &error);
+ g_free (file);
+
+ if (!loaded)
+ {
+ if (error)
+ {
+ g_warning (_("Error while initializing bookmarks: %s"), error->message);
+ g_error_free (error);
}
+ }
+}
- if (s_host)
- {
- g_free (s_host);
- s_host = NULL;
- }
+static void
+vinagre_bookmarks_save_file (VinagreBookmarks *book)
+{
+ gchar *file;
+ gchar *data;
+ gsize length;
+ GError *error;
+
+ error = NULL;
+ data = g_key_file_to_data (book->priv->file,
+ &length,
+ &error);
+ if (!data)
+ {
+ if (error)
+ {
+ g_warning (_("Error while saving bookmarks: %s"), error->message);
+ g_error_free (error);
+ }
+
+ return;
+
+ }
+
+ file = filename ();
+ error = NULL;
+
+ if (!g_file_set_contents (file,
+ data,
+ length,
+ &error))
+ {
+ if (error)
+ {
+ g_warning (_("Error while saving bookmarks: %s"), error->message);
+ g_error_free (error);
+ g_free (file);
+ g_free (data);
+ return;
+ }
}
- if (s_host)
- g_free (s_host);
+ g_free (file);
+ g_free (data);
- if (conns)
- g_strfreev (conns);
+ g_signal_emit (book, signals[BOOKMARK_CHANGED], 0);
+}
- return conn;
+static void
+vinagre_bookmarks_clear_conns (VinagreBookmarks *book)
+{
+ g_slist_foreach (book->priv->conns, (GFunc) g_object_unref, NULL);
+ g_slist_free (book->priv->conns);
+
+ book->priv->conns = NULL;
+}
+
+static void
+vinagre_bookmarks_update_conns (VinagreBookmarks *book)
+{
+ gsize length, i;
+ gchar **conns;
+
+ vinagre_bookmarks_clear_conns (book);
+
+ conns = g_key_file_get_groups (book->priv->file, &length);
+ for (i=0; i<length; i++)
+ {
+ VinagreConnection *conn;
+ gchar *s_value;
+ gint i_value;
+
+ conn = vinagre_connection_new ();
+ vinagre_connection_set_name (conn, conns[i]);
+
+ s_value = g_key_file_get_string (book->priv->file, conns[i], "host", NULL);
+ vinagre_connection_set_host (conn, s_value);
+ g_free (s_value);
+
+ i_value = g_key_file_get_integer (book->priv->file, conns[i], "port", NULL);
+ vinagre_connection_set_port (conn, i_value);
+
+ book->priv->conns = g_slist_prepend (book->priv->conns, conn);
+ }
+
+ g_strfreev (conns);
}
/* vim: ts=8 */
Modified: branches/unstable/src/vinagre-bookmarks.h
==============================================================================
--- branches/unstable/src/vinagre-bookmarks.h (original)
+++ branches/unstable/src/vinagre-bookmarks.h Fri Mar 21 13:17:50 2008
@@ -2,7 +2,7 @@
* vinagre-bookmarks.h
* This file is part of vinagre
*
- * Copyright (C) 2007 Jonh Wendell <wendell bani com br>
+ * Copyright (C) 2007,2008 Jonh Wendell <wendell bani com br>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,26 +18,61 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __VINAGRE_FAVORITES_H__
-#define __VINAGRE_FAVORITES_H__
+#ifndef __VINAGRE_BOOKMARKS_H__
+#define __VINAGRE_BOOKMARKS_H__
#include <glib.h>
#include "vinagre-connection.h"
+
+G_BEGIN_DECLS
+
+#define VINAGRE_TYPE_BOOKMARKS (vinagre_bookmarks_get_type ())
+#define VINAGRE_BOOKMARKS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VINAGRE_TYPE_BOOKMARKS, VinagreBookmarks))
+#define VINAGRE_BOOKMARKS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VINAGRE_TYPE_BOOKMARKS, VinagreBookmarksClass))
+#define VINAGRE_IS_BOOKMARKS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VINAGRE_TYPE_BOOKMARKS))
+#define VINAGRE_IS_BOOKMARKS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VINAGRE_TYPE_BOOKMARKS))
+#define VINAGRE_BOOKMARKS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VINAGRE_TYPE_BOOKMARKS, VinagreBookmarksClass))
+
+typedef struct _VinagreBookmarksClass VinagreBookmarksClass;
+typedef struct _VinagreBookmarks VinagreBookmarks;
+typedef struct _VinagreBookmarksPrivate VinagreBookmarksPrivate;
+
+struct _VinagreBookmarksClass
+{
+ GObjectClass parent_class;
+
+ /* Signals */
+ void (* changed) (VinagreBookmarks *book);
+};
+
+struct _VinagreBookmarks
+{
+ GObject parent_instance;
+ VinagreBookmarksPrivate *priv;
+};
+
#include "vinagre-window.h"
-void vinagre_bookmarks_init (void);
-void vinagre_bookmarks_finalize (void);
+GType vinagre_bookmarks_get_type (void) G_GNUC_CONST;
-gboolean vinagre_bookmarks_add (VinagreConnection *conn,
- VinagreWindow *window);
-gboolean vinagre_bookmarks_del (VinagreConnection *conn,
- VinagreWindow *window);
-gboolean vinagre_bookmarks_edit (VinagreConnection *conn,
- VinagreWindow *window);
+VinagreBookmarks *vinagre_bookmarks_get_default (void);
-GList *vinagre_bookmarks_get_all (void);
-VinagreConnection *vinagre_bookmarks_exists (const char *host, int port);
+gboolean vinagre_bookmarks_add (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window);
+gboolean vinagre_bookmarks_del (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window);
+gboolean vinagre_bookmarks_edit (VinagreBookmarks *book,
+ VinagreConnection *conn,
+ GtkWindow *window);
+
+GSList *vinagre_bookmarks_get_all (VinagreBookmarks *book);
+VinagreConnection *vinagre_bookmarks_exists (VinagreBookmarks *book,
+ const gchar *host,
+ gint port);
-#endif /* __VINAGRE_FAVORITES_H__ */
+G_END_DECLS
+#endif /* __VINAGRE_BOOKMARKS_H__ */
/* vim: ts=8 */
Modified: branches/unstable/src/vinagre-commands.c
==============================================================================
--- branches/unstable/src/vinagre-commands.c (original)
+++ branches/unstable/src/vinagre-commands.c Fri Mar 21 13:17:50 2008
@@ -246,18 +246,18 @@
VinagreConnection *conn;
gchar *name;
+ g_return_if_fail (VINAGRE_IS_WINDOW (window));
+
conn = vinagre_tab_get_conn (VINAGRE_TAB (window->priv->active_tab));
- g_return_if_fail (conn != NULL);
+ g_return_if_fail (VINAGRE_IS_CONNECTION (conn));
- name = vinagre_connection_get_best_name (conn);
+ vinagre_bookmarks_add (window->priv->book,
+ conn,
+ GTK_WINDOW (window));
- vinagre_bookmarks_add (conn, window);
+ name = vinagre_connection_get_best_name (conn);
vinagre_tab_set_title (VINAGRE_TAB (window->priv->active_tab),
name);
-
- vinagre_fav_update_list (VINAGRE_FAV (window->priv->fav_panel));
- vinagre_window_update_bookmarks_list_menu (window);
-
g_free (name);
}
@@ -265,20 +265,31 @@
vinagre_cmd_bookmarks_edit (GtkAction *action,
VinagreWindow *window)
{
- g_return_if_fail (window->priv->fav_conn_selected != NULL);
+ g_return_if_fail (VINAGRE_IS_WINDOW (window));
+ g_return_if_fail (VINAGRE_IS_CONNECTION (window->priv->fav_conn_selected));
- if (vinagre_bookmarks_edit (window->priv->fav_conn_selected, window))
- {
- vinagre_fav_update_list (VINAGRE_FAV (window->priv->fav_panel));
- vinagre_window_update_bookmarks_list_menu (window);
- }
+ vinagre_bookmarks_edit (window->priv->book,
+ window->priv->fav_conn_selected,
+ GTK_WINDOW (window));
+}
+
+void
+vinagre_cmd_bookmarks_del (GtkAction *action,
+ VinagreWindow *window)
+{
+ g_return_if_fail (VINAGRE_IS_WINDOW (window));
+ g_return_if_fail (VINAGRE_IS_CONNECTION (window->priv->fav_conn_selected));
+
+ vinagre_bookmarks_del (window->priv->book,
+ window->priv->fav_conn_selected,
+ GTK_WINDOW (window));
}
void
vinagre_cmd_bookmarks_open (GtkAction *action,
VinagreWindow *window)
{
- VinagreConnection *conn = NULL;
+ VinagreConnection *conn;
g_return_if_fail (VINAGRE_IS_WINDOW (window));
@@ -286,24 +297,11 @@
if (!conn)
conn = window->priv->fav_conn_selected;
- g_return_if_fail (conn != NULL);
+ g_return_if_fail (VINAGRE_IS_CONNECTION (conn));
vinagre_cmd_open_bookmark (window, conn);
}
-void
-vinagre_cmd_bookmarks_del (GtkAction *action,
- VinagreWindow *window)
-{
- g_return_if_fail (window->priv->fav_conn_selected != NULL);
-
- if (vinagre_bookmarks_del (window->priv->fav_conn_selected, window))
- {
- vinagre_fav_update_list (VINAGRE_FAV (window->priv->fav_panel));
- vinagre_window_update_bookmarks_list_menu (window);
- }
-}
-
/* Make url in about dialog clickable */
static void
vinagre_about_dialog_handle_url (GtkAboutDialog *about,
Modified: branches/unstable/src/vinagre-connect.c
==============================================================================
--- branches/unstable/src/vinagre-connect.c (original)
+++ branches/unstable/src/vinagre-connect.c Fri Mar 21 13:17:50 2008
@@ -109,7 +109,9 @@
gtk_widget_hide (GTK_WIDGET (dialog.dialog));
- conn = vinagre_bookmarks_exists (host, port);
+ conn = vinagre_bookmarks_exists (vinagre_window_get_bookmarks (window),
+ host,
+ port);
if (!conn)
{
conn = vinagre_connection_new ();
Modified: branches/unstable/src/vinagre-connection.c
==============================================================================
--- branches/unstable/src/vinagre-connection.c (original)
+++ branches/unstable/src/vinagre-connection.c Fri Mar 21 13:17:50 2008
@@ -53,6 +53,8 @@
#define VINAGRE_CONNECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VINAGRE_TYPE_CONNECTION, VinagreConnectionPrivate))
G_DEFINE_TYPE (VinagreConnection, vinagre_connection, G_TYPE_OBJECT);
+static VinagreBookmarks *main_bookmark = NULL;
+
static void
vinagre_connection_init (VinagreConnection *conn)
{
@@ -64,6 +66,8 @@
conn->priv->password = NULL;
conn->priv->name = NULL;
conn->priv->desktop_name = NULL;
+
+ //main_bookmark = vinagre_bookmarks_get_default ();
}
static void
@@ -465,7 +469,7 @@
host = server[0];
port = server[1] ? atoi (server[1]) : 5900;
- conn = vinagre_bookmarks_exists (host, port);
+ conn = vinagre_bookmarks_exists (main_bookmark, host, port);
if (!conn)
{
conn = vinagre_connection_new ();
@@ -528,7 +532,7 @@
port = g_key_file_get_integer (file, "connection", "port", NULL);
if (host)
{
- conn = vinagre_bookmarks_exists (host, port);
+ conn = vinagre_bookmarks_exists (main_bookmark, host, port);
if (!conn)
{
conn = vinagre_connection_new ();
Modified: branches/unstable/src/vinagre-fav.c
==============================================================================
--- branches/unstable/src/vinagre-fav.c (original)
+++ branches/unstable/src/vinagre-fav.c Fri Mar 21 13:17:50 2008
@@ -35,6 +35,7 @@
VinagreWindow *window;
GtkWidget *tree;
GtkTreeModel *model;
+ VinagreConnection *conn_selected;
};
G_DEFINE_TYPE(VinagreFav, vinagre_fav, GTK_TYPE_VBOX)
@@ -68,8 +69,6 @@
static void
vinagre_fav_finalize (GObject *object)
{
-// VinagreFav *fav = VINAGRE_FAV (object);
-
G_OBJECT_CLASS (vinagre_fav_parent_class)->finalize (object);
}
@@ -193,6 +192,8 @@
-1);
}
+ fav->priv->conn_selected = conn;
+
/* Emits the signal saying that user has selected a bookmark */
g_signal_emit (G_OBJECT (fav),
signals[FAV_SELECTED],
@@ -345,6 +346,26 @@
return FALSE;
}
+static gboolean
+vinagre_fav_tooltip (GtkWidget *widget,
+ gint x, gint y, gboolean k,
+ GtkTooltip *tooltip,
+ VinagreFav *fav)
+{
+ gchar *tip;
+
+ if (!VINAGRE_IS_CONNECTION (fav->priv->conn_selected))
+ return FALSE;
+
+ tip = g_markup_printf_escaped (
+ "<b>%s</b> %s\n"
+ "<b>%s</b> %d",
+ _("Host:"), vinagre_connection_get_host (fav->priv->conn_selected),
+ _("Port:"), vinagre_connection_get_port (fav->priv->conn_selected));
+
+ gtk_tooltip_set_markup (tooltip, tip);
+ g_free (tip);
+}
static void
vinagre_fav_create_tree (VinagreFav *fav)
@@ -406,10 +427,16 @@
G_CALLBACK (fav_popup_menu),
fav);
+ gtk_widget_set_has_tooltip (fav->priv->tree, TRUE);
+ g_signal_connect (fav->priv->tree,
+ "query-tooltip",
+ G_CALLBACK (vinagre_fav_tooltip),
+ fav);
- vinagre_fav_update_list (fav);
+ g_idle_add ((GSourceFunc)vinagre_fav_update_list, fav);
gtk_container_add (GTK_CONTAINER(scroll), fav->priv->tree);
+
gtk_widget_show (fav->priv->tree);
g_object_unref (G_OBJECT (fav->priv->model));
}
@@ -431,6 +458,7 @@
GtkWidget *label_box, *label, *close_button;
fav->priv = VINAGRE_FAV_GET_PRIVATE (fav);
+ fav->priv->conn_selected = NULL;
/* setup label */
label_box = gtk_hbox_new (FALSE, 0);
@@ -451,6 +479,11 @@
/* setup the tree */
vinagre_fav_create_tree (fav);
+
+ g_signal_connect_swapped (vinagre_bookmarks_get_default (),
+ "changed",
+ G_CALLBACK (vinagre_fav_update_list),
+ fav);
}
GtkWidget *
@@ -463,27 +496,32 @@
NULL));
}
-void
+gboolean
vinagre_fav_update_list (VinagreFav *fav)
{
GtkTreeIter iter;
GtkListStore *store;
- GList *list;
- VinagreConnection *conn;
- gchar *name;
+ GSList *list, *l, *next;
GdkPixbuf *pixbuf;
-
- g_return_if_fail (VINAGRE_IS_FAV (fav));
+
+ g_return_val_if_fail (VINAGRE_IS_FAV (fav), FALSE);
store = GTK_LIST_STORE (fav->priv->model);
gtk_list_store_clear (store);
- list = vinagre_bookmarks_get_all ();
- while (list)
+ list = vinagre_bookmarks_get_all (vinagre_bookmarks_get_default ());
+
+ for (l = list; l; l = next)
{
- conn = (VinagreConnection *) list->data;
- name = vinagre_connection_get_best_name (conn);
+ gchar *name = NULL;
+ VinagreConnection *conn;
+ next = l->next;
+
+ conn = (VinagreConnection *) l->data;
+ g_assert (VINAGRE_IS_CONNECTION (conn));
+
+ name = vinagre_connection_get_best_name (conn);
pixbuf = vinagre_connection_get_icon (conn);
gtk_list_store_append (store, &iter);
@@ -492,12 +530,12 @@
NAME_COL, name,
CONN_COL, conn,
-1);
- list = list->next;
- g_free (name);
+ if (name)
+ g_free (name);
if (pixbuf != NULL)
g_object_unref (pixbuf);
}
- g_list_free (list);
+ return FALSE;
}
/* vim: ts=8 */
Modified: branches/unstable/src/vinagre-fav.h
==============================================================================
--- branches/unstable/src/vinagre-fav.h (original)
+++ branches/unstable/src/vinagre-fav.h Fri Mar 21 13:17:50 2008
@@ -61,7 +61,7 @@
GtkWidget *vinagre_fav_new (VinagreWindow *window);
-void vinagre_fav_update_list (VinagreFav *fav);
+gboolean vinagre_fav_update_list (VinagreFav *fav);
G_END_DECLS
Modified: branches/unstable/src/vinagre-window-private.h
==============================================================================
--- branches/unstable/src/vinagre-window-private.h (original)
+++ branches/unstable/src/vinagre-window-private.h Fri Mar 21 13:17:50 2008
@@ -23,6 +23,7 @@
#include "vinagre-window.h"
#include "vinagre-connection.h"
+#include "vinagre-bookmarks.h"
G_BEGIN_DECLS
@@ -55,6 +56,7 @@
GtkWidget *active_tab;
VinagreConnection *fav_conn_selected;
+ VinagreBookmarks *book;
gint width;
gint height;
Modified: branches/unstable/src/vinagre-window.c
==============================================================================
--- branches/unstable/src/vinagre-window.c (original)
+++ branches/unstable/src/vinagre-window.c Fri Mar 21 13:17:50 2008
@@ -62,9 +62,6 @@
window->priv->manager = NULL;
}
-
- vinagre_bookmarks_finalize ();
-
G_OBJECT_CLASS (vinagre_window_parent_class)->finalize (object);
}
@@ -542,13 +539,10 @@
vinagre_window_update_bookmarks_list_menu (VinagreWindow *window)
{
VinagreWindowPrivate *p = window->priv;
- GList *actions, *l, *favs;
- gint n, i;
- guint id;
- VinagreConnection *conn;
- gchar *action_name, *action_label;
- GtkAction *action;
- gchar *name, *tooltip;
+ GList *actions, *l;
+ GSList *favs;
+ gint n, i;
+ guint id;
g_return_if_fail (p->bookmarks_list_action_group != NULL);
@@ -564,40 +558,41 @@
gtk_action_group_remove_action (p->bookmarks_list_action_group,
GTK_ACTION (l->data));
}
- g_list_free (actions);
+ g_list_free (actions);
/* Get the bookmarks from file */
- favs = vinagre_bookmarks_get_all ();
- n = g_list_length (favs);
+ favs = vinagre_bookmarks_get_all (window->priv->book);
+ n = g_slist_length (favs);
i = 0;
id = (n > 0) ? gtk_ui_manager_new_merge_id (p->manager) : 0;
while (favs)
{
+ VinagreConnection *conn;
+ gchar *action_name, *action_label;
+ GtkAction *action;
+ gchar *name, *tooltip;
+
conn = (VinagreConnection *) favs->data;
+ g_assert (VINAGRE_IS_CONNECTION (conn));
+
name = vinagre_connection_get_best_name (conn);
- action_name = g_strdup_printf ("Fav_%d", i);
+ action_name = g_strdup_printf ("Bookmark_%d", i);
/* Translators: This is server:port, a statusbar tooltip when mouse is over a bookmark item on menu */
tooltip = g_strdup_printf (_("Open %s:%d"),
vinagre_connection_get_host (conn),
vinagre_connection_get_port (conn));
- action_label = vinagre_utils_escape_underscores (
- name,
- -1);
+ action_label = vinagre_utils_escape_underscores (name, -1);
action = gtk_action_new (action_name,
action_label,
tooltip,
NULL);
g_object_set (G_OBJECT (action), "icon-name", "application-x-vnc", NULL);
- g_object_set_data_full (G_OBJECT (action),
- "conn",
- conn,
- (GDestroyNotify) g_object_unref);
+ g_object_set_data (G_OBJECT (action), "conn", conn);
gtk_action_group_add_action (p->bookmarks_list_action_group,
GTK_ACTION (action));
-
g_signal_connect (action,
"activate",
G_CALLBACK (vinagre_cmd_bookmarks_open),
@@ -620,8 +615,6 @@
i++;
}
- g_list_free (favs);
-
p->bookmarks_list_menu_ui_id = id;
}
@@ -909,7 +902,7 @@
window->priv->signal_notebook = 0;
window->priv->machines_connected = 0;
- vinagre_bookmarks_init ();
+ window->priv->book = vinagre_bookmarks_get_default ();
main_box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), main_box);
@@ -943,6 +936,11 @@
set_machine_menu_sensitivity (window);
vinagre_window_update_bookmarks_list_menu (window);
+ g_signal_connect_swapped (window->priv->book,
+ "changed",
+ G_CALLBACK (vinagre_window_update_bookmarks_list_menu),
+ window);
+
vinagre_window_init_clipboard (window);
}
@@ -1073,13 +1071,22 @@
}
VinagreTab *
-vinagre_window_get_active_tab (VinagreWindow *window)
+vinagre_window_get_active_tab (VinagreWindow *window)
{
g_return_val_if_fail (VINAGRE_IS_WINDOW (window), NULL);
return VINAGRE_TAB (window->priv->active_tab);
}
+VinagreBookmarks *
+vinagre_window_get_bookmarks (VinagreWindow *window)
+{
+ g_return_val_if_fail (VINAGRE_IS_WINDOW (window), NULL);
+
+ return window->priv->book;
+}
+
+
GtkUIManager *
vinagre_window_get_ui_manager (VinagreWindow *window)
{
Modified: branches/unstable/src/vinagre-window.h
==============================================================================
--- branches/unstable/src/vinagre-window.h (original)
+++ branches/unstable/src/vinagre-window.h Fri Mar 21 13:17:50 2008
@@ -38,6 +38,7 @@
typedef struct _VinagreWindowClass VinagreWindowClass;
#include "vinagre-tab.h"
+#include "vinagre-bookmarks.h"
struct _VinagreWindow
{
@@ -78,6 +79,7 @@
GtkWidget *vinagre_window_get_notebook (VinagreWindow *window);
GtkActionGroup *vinagre_window_get_main_action (VinagreWindow *window);
GtkActionGroup *vinagre_window_get_sensitive_action (VinagreWindow *window);
+VinagreBookmarks *vinagre_window_get_bookmarks (VinagreWindow *window);
void vinagre_window_update_bookmarks_list_menu (VinagreWindow *window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]