38 #include <glib/gi18n.h> 39 #include <glib/gprintf.h> 47 #define IS_EMPTY(s) ((!s) || (s[0] == 0)) 73 g_signal_connect(G_OBJECT(item),
"destroy", G_CALLBACK(remmina_applet_menu_item_destroy), NULL);
84 va_start(ap, item_type);
86 item = REMMINA_APPLET_MENU_ITEM(g_object_new(REMMINA_TYPE_APPLET_MENU_ITEM, NULL));
92 item->
filename = g_strdup(va_arg(ap,
const gchar*));
95 gkeyfile = g_key_file_new();
97 if (!g_key_file_load_from_file(gkeyfile, item->
filename, G_KEY_FILE_NONE, NULL)) {
98 g_key_file_free(gkeyfile);
103 item->
name = g_key_file_get_string(gkeyfile,
"remmina",
"name", NULL);
104 item->
group = g_key_file_get_string(gkeyfile,
"remmina",
"group", NULL);
105 item->
protocol = g_key_file_get_string(gkeyfile,
"remmina",
"protocol", NULL);
106 item->
server = g_key_file_get_string(gkeyfile,
"remmina",
"server", NULL);
107 item->
ssh_tunnel_enabled = g_key_file_get_boolean(gkeyfile,
"remmina",
"ssh_tunnel_enabled", NULL);
109 g_key_file_free(gkeyfile);
111 if (item->
name == NULL) {
112 g_printf(
"WARNING: missing name= line in file %s. Skipping.\n", item->
filename);
120 item->
name = g_strdup(va_arg(ap,
const gchar *));
121 item->
group = g_strdup(_(
"Discovered"));
126 item->
name = g_strdup(_(
"New Connection"));
133 widget = gtk_label_new(item->
name);
134 gtk_widget_show(widget);
135 gtk_widget_set_valign(widget, GTK_ALIGN_START);
136 gtk_widget_set_halign(widget, GTK_ALIGN_START);
137 gtk_container_add(GTK_CONTAINER(item), widget);
140 gtk_widget_set_tooltip_text(GTK_WIDGET(item), item->
server);
143 return GTK_WIDGET(item);
148 TRACE_CALL(__func__);
154 itema = REMMINA_APPLET_MENU_ITEM(*((
void**)a));
155 itemb = REMMINA_APPLET_MENU_ITEM(*((
void**)b));
158 if (IS_EMPTY(itema->
group) && !IS_EMPTY(itemb->
group))
160 if (!IS_EMPTY(itema->
group) && IS_EMPTY(itemb->
group))
176 return g_strcmp0(itema->
name, itemb->
name);