diff options
author | Antenore Gatta <antenore@simbiosi.org> | 2022-11-07 00:35:15 +0300 |
---|---|---|
committer | Antenore Gatta <antenore@simbiosi.org> | 2022-11-07 00:35:15 +0300 |
commit | 5b8924516c94be3578af0771610993dbc4bfcb84 (patch) | |
tree | dcd3b526d8ebeced3faf36ed2dbdc3767a30818e | |
parent | 9181810abbf05c46a26f794a2cb4cc61c3467d08 (diff) |
Automatic doc build by remmina-ci
21 files changed, 184 insertions, 184 deletions
diff --git a/public/rcw_8c_source.html b/public/rcw_8c_source.html index 38198800e..3ab9ea726 100644 --- a/public/rcw_8c_source.html +++ b/public/rcw_8c_source.html @@ -103,7 +103,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="struct___remmina_pref_html_a887cbbd379d159cd0ac1acea7173d07b"><div class="ttname"><a href="struct___remmina_pref.html#a887cbbd379d159cd0ac1acea7173d07b">_RemminaPref::shortcutkey_minimize</a></div><div class="ttdeci">guint shortcutkey_minimize</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00184">remmina_pref.h:184</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> <div class="ttc" id="remmina__pref_8h_html_a4caf8d8f829279fba122163d961608a4a069738542d6980f9594299ab57221a7f"><div class="ttname"><a href="remmina__pref_8h.html#a4caf8d8f829279fba122163d961608a4a069738542d6980f9594299ab57221a7f">TOOLBAR_PLACEMENT_TOP</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00076">remmina_pref.h:76</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="rcw_8c_html_af8d1a8843f974fb8170d76f945a72080"><div class="ttname"><a href="rcw_8c.html#af8d1a8843f974fb8170d76f945a72080">rcw_update_tag</a></div><div class="ttdeci">static void rcw_update_tag(RemminaConnectionWindow *cnnwin, RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l03408">rcw.c:3408</a></div></div> <div class="ttc" id="remmina__widget__pool_8c_html_a0a6a2069cdbbb920fb09f95bec3e997e"><div class="ttname"><a href="remmina__widget__pool_8c.html#a0a6a2069cdbbb920fb09f95bec3e997e">remmina_widget_pool_find_by_window</a></div><div class="ttdeci">GtkWidget * remmina_widget_pool_find_by_window(GType type, GdkWindow *window)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__widget__pool_8c_source.html#l00085">remmina_widget_pool.c:85</a></div></div> <div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a23e854b5f2eb0c8d3efa54cac0acb6cf"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a23e854b5f2eb0c8d3efa54cac0acb6cf">REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00052">types.h:52</a></div></div> @@ -130,7 +130,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="struct___remmina_pref_html_a086c9b0fe4bcfe0e5349422d17886d65"><div class="ttname"><a href="struct___remmina_pref.html#a086c9b0fe4bcfe0e5349422d17886d65">_RemminaPref::keystrokes</a></div><div class="ttdeci">gchar * keystrokes</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00145">remmina_pref.h:145</a></div></div> <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> <div class="ttc" id="rcw_8c_html_ad45e51f5a72b7ffe9bca86d336563757"><div class="ttname"><a href="rcw_8c.html#ad45e51f5a72b7ffe9bca86d336563757">rco_leave_protocol_widget</a></div><div class="ttdeci">static gboolean rco_leave_protocol_widget(GtkWidget *widget, GdkEventCrossing *event, RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l02845">rcw.c:2845</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a2cc56c093d45511af91c6b05c522c45a"><div class="ttname"><a href="struct___remmina_pref.html#a2cc56c093d45511af91c6b05c522c45a">_RemminaPref::shortcutkey_dynres</a></div><div class="ttdeci">guint shortcutkey_dynres</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00178">remmina_pref.h:178</a></div></div> <div class="ttc" id="remmina__public_8c_html_a893f0cfe2d694ab700975f4f427ee2f6"><div class="ttname"><a href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a></div><div class="ttdeci">void remmina_public_send_notification(const gchar *notification_id, const gchar *notification_title, const gchar *notification_message)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00637">remmina_public.c:637</a></div></div> <div class="ttc" id="rcw_8c_html_a029feea88b7ef32425595efe7d270947"><div class="ttname"><a href="rcw_8c.html#a029feea88b7ef32425595efe7d270947">rco_on_disconnect</a></div><div class="ttdeci">void rco_on_disconnect(RemminaProtocolWidget *gp, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l04290">rcw.c:4290</a></div></div> @@ -232,7 +232,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="rcw_8c_html_ab7dc553cbd2005feb77163cf79f48f6d"><div class="ttname"><a href="rcw_8c.html#ab7dc553cbd2005feb77163cf79f48f6d">remmina_protocol_widget_update_alignment</a></div><div class="ttdeci">static void remmina_protocol_widget_update_alignment(RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01144">rcw.c:1144</a></div></div> <div class="ttc" id="remmina__scrolled__viewport_8c_html_aadfe00c3960eab12d17bdb47495dd1ee"><div class="ttname"><a href="remmina__scrolled__viewport_8c.html#aadfe00c3960eab12d17bdb47495dd1ee">remmina_scrolled_viewport_new</a></div><div class="ttdeci">GtkWidget * remmina_scrolled_viewport_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__scrolled__viewport_8c_source.html#l00201">remmina_scrolled_viewport.c:201</a></div></div> <div class="ttc" id="rcw_8c_html_af99dc9a4135deff0a11c2d56877bad93"><div class="ttname"><a href="rcw_8c.html#af99dc9a4135deff0a11c2d56877bad93">rcw_on_switch_page_finalsel</a></div><div class="ttdeci">static gboolean rcw_on_switch_page_finalsel(gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l03602">rcw.c:3602</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00937">remmina_file.c:937</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00946">remmina_file.c:946</a></div></div> <div class="ttc" id="rcw_8c_html_a0c2979e582fbc5cea1557d086187854f"><div class="ttname"><a href="rcw_8c.html#a0c2979e582fbc5cea1557d086187854f">print_crossing_event</a></div><div class="ttdeci">static void print_crossing_event(GdkEventCrossing *event)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l02766">rcw.c:2766</a></div></div> <div class="ttc" id="rcw_8c_html_adf4d204cce70b6609c15c1ca95082a43"><div class="ttname"><a href="rcw_8c.html#adf4d204cce70b6609c15c1ca95082a43">rcw_toolbar_autofit</a></div><div class="ttdeci">static void rcw_toolbar_autofit(GtkToolItem *toggle, RemminaConnectionWindow *cnnwin)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00984">rcw.c:984</a></div></div> <div class="ttc" id="remmina__utils_8h_html"><div class="ttname"><a href="remmina__utils_8h.html">remmina_utils.h</a></div><div class="ttdoc">General utility functions, non-GTK related. </div></div> @@ -274,7 +274,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="rcw_8c_html_a60f9f738cfd988cfc7cc39997538e4e0"><div class="ttname"><a href="rcw_8c.html#a60f9f738cfd988cfc7cc39997538e4e0">rcw_notify_widget_toolbar_placement</a></div><div class="ttdeci">gboolean rcw_notify_widget_toolbar_placement(GtkWidget *widget, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00752">rcw.c:752</a></div></div> <div class="ttc" id="rcw_8c_html_a7b60c2cb02c4a893d8d2054f0bb53790"><div class="ttname"><a href="rcw_8c.html#a7b60c2cb02c4a893d8d2054f0bb53790">rco_scrolled_fullscreen_mode</a></div><div class="ttdeci">static void rco_scrolled_fullscreen_mode(GtkWidget *widget, RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01395">rcw.c:1395</a></div></div> <div class="ttc" id="rcw_8c_html_a2690c97a972e458dea9f5c0566ea50b9"><div class="ttname"><a href="rcw_8c.html#a2690c97a972e458dea9f5c0566ea50b9">rco_disconnect_current_page</a></div><div class="ttdeci">static void rco_disconnect_current_page(RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00417">rcw.c:417</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="struct___remmina_protocol_widget_html"><div class="ttname"><a href="struct___remmina_protocol_widget.html">_RemminaProtocolWidget</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8h_source.html#l00058">remmina_protocol_widget.h:58</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a17bfba7a11836808719d33d5f6edbdc7"><div class="ttname"><a href="struct___remmina_pref.html#a17bfba7a11836808719d33d5f6edbdc7">_RemminaPref::shortcutkey_disconnect</a></div><div class="ttdeci">guint shortcutkey_disconnect</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00185">remmina_pref.h:185</a></div></div> <div class="ttc" id="remmina__exec_8c_html_a424cabdcff647797061e7482049d62a7"><div class="ttname"><a href="remmina__exec_8c.html#a424cabdcff647797061e7482049d62a7">remmina_exec_command</a></div><div class="ttdeci">void remmina_exec_command(RemminaCommandType command, const gchar *data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00368">remmina_exec.c:368</a></div></div> @@ -351,7 +351,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="remmina__applet__menu__item_8h_html_a75e42156d38612a96ae48899316b4727a9056a1ad9722374064fe166aa77e69a3"><div class="ttname"><a href="remmina__applet__menu__item_8h.html#a75e42156d38612a96ae48899316b4727a9056a1ad9722374064fe166aa77e69a3">REMMINA_APPLET_MENU_ITEM_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__applet__menu__item_8h_source.html#l00050">remmina_applet_menu_item.h:50</a></div></div> <div class="ttc" id="rcw_8c_html_a36c08f198ab102d001d1221bdd8ea38c"><div class="ttname"><a href="rcw_8c.html#a36c08f198ab102d001d1221bdd8ea38c">rco_create_scrolled_container</a></div><div class="ttdeci">static GtkWidget * rco_create_scrolled_container(RemminaScaleMode scalemode, int view_mode)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00927">rcw.c:927</a></div></div> <div class="ttc" id="rcw_8c_html_ae8409c04e40ec792c1f477360bfcd6ba"><div class="ttname"><a href="rcw_8c.html#ae8409c04e40ec792c1f477360bfcd6ba">rcw_toolbar_scaler_option</a></div><div class="ttdeci">static void rcw_toolbar_scaler_option(GtkToolItem *toggle, RemminaConnectionWindow *cnnwin)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01506">rcw.c:1506</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="rcw_8c_html_a61b9eae2dd47962c5966d5d32eec9964"><div class="ttname"><a href="rcw_8c.html#a61b9eae2dd47962c5966d5d32eec9964">rco_on_desktop_resize</a></div><div class="ttdeci">void rco_on_desktop_resize(RemminaProtocolWidget *gp, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l04340">rcw.c:4340</a></div></div> <div class="ttc" id="remmina__utils_8c_html_ac804e6111e538ee2fa425b8b6fd1fb66"><div class="ttname"><a href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a></div><div class="ttdeci">guint remmina_utils_string_replace_all(GString *haystack, const gchar *needle, const gchar *replace)</div><div class="ttdoc">Replaces all occurrences of needle in haystack with replace. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__utils_8c_source.html#l00193">remmina_utils.c:193</a></div></div> <div class="ttc" id="rcw_8c_html_a8af64223778fc6adee796f5d98f17fd6"><div class="ttname"><a href="rcw_8c.html#a8af64223778fc6adee796f5d98f17fd6">rcw_focus_out_event</a></div><div class="ttdeci">static gboolean rcw_focus_out_event(GtkWidget *widget, GdkEventWindowState *event, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l03236">rcw.c:3236</a></div></div> @@ -392,8 +392,8 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="rcw_8c_html_a5472fed2058a6597c3c7b7c91e98a73e"><div class="ttname"><a href="rcw_8c.html#a5472fed2058a6597c3c7b7c91e98a73e">focus_in_delayed_grab</a></div><div class="ttdeci">static gboolean focus_in_delayed_grab(RemminaConnectionWindow *cnnwin)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l02904">rcw.c:2904</a></div></div> <div class="ttc" id="rcw_8c_html_a23692809213a6dfe683afe3d0dece3aa"><div class="ttname"><a href="rcw_8c.html#a23692809213a6dfe683afe3d0dece3aa">rco_update_toolbar_autofit_button</a></div><div class="ttdeci">void rco_update_toolbar_autofit_button(RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01629">rcw.c:1629</a></div></div> <div class="ttc" id="remmina_8c_html_ae729d4262682c8674b8dd0135014810a"><div class="ttname"><a href="remmina_8c.html#ae729d4262682c8674b8dd0135014810a">extrahardening</a></div><div class="ttdeci">gboolean extrahardening</div><div class="ttdef"><b>Definition:</b> <a href="remmina_8c_source.html#l00086">remmina.c:86</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> <div class="ttc" id="rcw_8c_html_ad5a67ac52028302d5681cceaf9ac46bc"><div class="ttname"><a href="rcw_8c.html#ad5a67ac52028302d5681cceaf9ac46bc">rcw_append_new_page</a></div><div class="ttdeci">static GtkWidget * rcw_append_new_page(RemminaConnectionWindow *cnnwin, RemminaConnectionObject *cnnobj)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l03551">rcw.c:3551</a></div></div> <div class="ttc" id="rcw_8c_html_aee06df544a91184cba1fe77c6991065a"><div class="ttname"><a href="rcw_8c.html#aee06df544a91184cba1fe77c6991065a">rco_get_monitor_geometry</a></div><div class="ttdeci">void rco_get_monitor_geometry(RemminaConnectionObject *cnnobj, GdkRectangle *sz)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01005">rcw.c:1005</a></div></div> <div class="ttc" id="remmina__pref_8h_html_a458e651af6690959efa2afb96be7d609ad947c85d5ea917958d90298dab033b2c"><div class="ttname"><a href="remmina__pref_8h.html#a458e651af6690959efa2afb96be7d609ad947c85d5ea917958d90298dab033b2c">FLOATING_TOOLBAR_VISIBILITY_DISABLE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00102">remmina_pref.h:102</a></div></div> @@ -408,7 +408,7 @@ $(document).ready(function(){initNavTree('rcw_8c_source.html','');}); <div class="ttc" id="rcw_8c_html_a07802fc420dc07560fe937d29172573c"><div class="ttname"><a href="rcw_8c.html#a07802fc420dc07560fe937d29172573c">rcw_delete_event</a></div><div class="ttdeci">static gboolean rcw_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00690">rcw.c:690</a></div></div> <div class="ttc" id="rcw_8c_html_a6fb67b7e52f4d570e72a201f0113a81c"><div class="ttname"><a href="rcw_8c.html#a6fb67b7e52f4d570e72a201f0113a81c">rcw_map_event</a></div><div class="ttdeci">static gboolean rcw_map_event(GtkWidget *widget, GdkEvent *event, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l03268">rcw.c:3268</a></div></div> <div class="ttc" id="remmina__unlock_8c_html_a81e79e5c1c230b7e2bf27b2457801d4e"><div class="ttname"><a href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a></div><div class="ttdeci">gint remmina_unlock_new(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__unlock_8c_source.html#l00112">remmina_unlock.c:112</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00874">remmina_file.c:874</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00883">remmina_file.c:883</a></div></div> <div class="ttc" id="struct___remmina_plugin_screenshot_data_html"><div class="ttname"><a href="struct___remmina_plugin_screenshot_data.html">_RemminaPluginScreenshotData</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00083">types.h:83</a></div></div> <div class="ttc" id="remmina__widget__pool_8c_html_a53fad3994b2550300cfd4fd8bb2a2b5b"><div class="ttname"><a href="remmina__widget__pool_8c.html#a53fad3994b2550300cfd4fd8bb2a2b5b">remmina_widget_pool_foreach</a></div><div class="ttdeci">gint remmina_widget_pool_foreach(RemminaWidgetPoolForEachFunc callback, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__widget__pool_8c_source.html#l00108">remmina_widget_pool.c:108</a></div></div> <div class="ttc" id="struct___remmina_connection_object_html_aed1d667ed3085ee229c0dfdcf715084d"><div class="ttname"><a href="struct___remmina_connection_object.html#aed1d667ed3085ee229c0dfdcf715084d">_RemminaConnectionObject::connected</a></div><div class="ttdeci">gboolean connected</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00170">rcw.c:170</a></div></div> diff --git a/public/remmina__exec_8c_source.html b/public/remmina__exec_8c_source.html index 2514a617b..8b668af88 100644 --- a/public/remmina__exec_8c_source.html +++ b/public/remmina__exec_8c_source.html @@ -135,7 +135,7 @@ $(document).ready(function(){initNavTree('remmina__exec_8c_source.html','');}); <div class="ttc" id="rcw_8h_html"><div class="ttname"><a href="rcw_8h.html">rcw.h</a></div></div> <div class="ttc" id="rcw_8c_html_a1b7a771392e15e527005305e71cc2546"><div class="ttname"><a href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a></div><div class="ttdeci">void rcw_open_from_file(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l04423">rcw.c:4423</a></div></div> <div class="ttc" id="remmina__exec_8h_html_a23616cb0334a45c2b477be6efd45ee0cabb2bf3aea0dd6f02ba402ec12a6ccbad"><div class="ttname"><a href="remmina__exec_8h.html#a23616cb0334a45c2b477be6efd45ee0cabb2bf3aea0dd6f02ba402ec12a6ccbad">REMMINA_COMMAND_PLUGIN</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8h_source.html#l00052">remmina_exec.h:52</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__about_8c_html_a3ad768979e0945a162018c6d596c90f4"><div class="ttname"><a href="remmina__about_8c.html#a3ad768979e0945a162018c6d596c90f4">remmina_about_open</a></div><div class="ttdeci">void remmina_about_open(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__about_8c_source.html#l00044">remmina_about.c:44</a></div></div> <div class="ttc" id="remmina__crypt_8h_html"><div class="ttname"><a href="remmina__crypt_8h.html">remmina_crypt.h</a></div></div> <div class="ttc" id="remmina__exec_8h_html_ae9dfd6986f18cb3d846a4933ac792fd5a94dfcc0fcf38aa8060ff843e40799284"><div class="ttname"><a href="remmina__exec_8h.html#ae9dfd6986f18cb3d846a4933ac792fd5a94dfcc0fcf38aa8060ff843e40799284">REMMINA_CONDEXIT_ONQUIT</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8h_source.html#l00060">remmina_exec.h:60</a></div></div> @@ -149,8 +149,8 @@ $(document).ready(function(){initNavTree('remmina__exec_8c_source.html','');}); <div class="ttc" id="remmina_8c_html_ab4a9a67c5372ff07b71d0558679ab7ae"><div class="ttname"><a href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a></div><div class="ttdeci">gboolean kioskmode</div><div class="ttdef"><b>Definition:</b> <a href="remmina_8c_source.html#l00082">remmina.c:82</a></div></div> <div class="ttc" id="remmina__exec_8c_html_aaa67e07e2426828d7e7b9b30d2038d31"><div class="ttname"><a href="remmina__exec_8c.html#aaa67e07e2426828d7e7b9b30d2038d31">remmina_application_condexit</a></div><div class="ttdeci">void remmina_application_condexit(RemminaCondExitType why)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00123">remmina_exec.c:123</a></div></div> <div class="ttc" id="remmina__exec_8c_html_aacc2a2ffd19e56fcb3e4b025d180ab8f"><div class="ttname"><a href="remmina__exec_8c.html#aacc2a2ffd19e56fcb3e4b025d180ab8f">disable_rcw_delete_confirm_cb</a></div><div class="ttdeci">static gboolean disable_rcw_delete_confirm_cb(GtkWidget *widget, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00111">remmina_exec.c:111</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> <div class="ttc" id="struct___remmina_connection_window_html"><div class="ttname"><a href="struct___remmina_connection_window.html">_RemminaConnectionWindow</a></div><div class="ttdef"><b>Definition:</b> <a href="rcw_8h_source.html#l00054">rcw.h:54</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_af7b58659604660eb0cb40b0e0f8348ab"><div class="ttname"><a href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a></div><div class="ttdeci">RemminaFile * remmina_file_manager_load_file(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00355">remmina_file_manager.c:355</a></div></div> <div class="ttc" id="remmina__exec_8c_html_aca2d356a03e1aac7b716b408183aa305"><div class="ttname"><a href="remmina__exec_8c.html#aca2d356a03e1aac7b716b408183aa305">newline_remove</a></div><div class="ttdeci">static void newline_remove(char *s)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00155">remmina_exec.c:155</a></div></div> diff --git a/public/remmina__ext__exec_8c_source.html b/public/remmina__ext__exec_8c_source.html index f97e754ee..03a723b3a 100644 --- a/public/remmina__ext__exec_8c_source.html +++ b/public/remmina__ext__exec_8c_source.html @@ -86,10 +86,10 @@ $(document).ready(function(){initNavTree('remmina__ext__exec_8c_source.html','') <div class="title">remmina_ext_exec.c</div> </div> </div><!--header--> <div class="contents"> -<a href="remmina__ext__exec_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> *</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> *</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <gdk/gdkkeysyms.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <glib.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <sys/wait.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__ext__exec_8h.html">remmina_ext_exec.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define SPAWN_TIMEOUT 10</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#define GET_OBJECT(object_name) gtk_builder_get_object(builder, object_name)</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd"> 51</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd">wait_for_child</a>(GPid pid, gint script_retval, gpointer data)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a> *pcspinner = (<a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a>*)data;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  gtk_spinner_stop(GTK_SPINNER(pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a>));</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  gtk_widget_destroy(GTK_WIDGET(pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a>));</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  g_spawn_close_pid(pid);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">/* TODO At the moment background processes will fail to start before the</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> * remmina connection.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> * Adding a delay here could be a (not good) solution, or we should</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> * monitor each child opened, but it could be quit tricky and messy */</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="remmina__ext__exec_8h.html#a7c81795162a70d06294fdf935ea210d7"> 64</a></span> GtkDialog* <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a>* remminafile, <span class="keyword">const</span> <span class="keywordtype">char</span> *remmina_ext_exec_type)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GtkBuilder *builder;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a> *pcspinner;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GError *error = NULL;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">char</span> **argv;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  gchar *cmd = NULL;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  gchar pre[11];</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  gchar post[12];</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GPid child_pid;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  strcpy(pre, <span class="stringliteral">"precommand"</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  strcpy(post, <span class="stringliteral">"postcommand"</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (remmina_ext_exec_type != NULL && (</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  strcmp(remmina_ext_exec_type, pre) |</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  strcmp(remmina_ext_exec_type, post) )) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  cmd = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, remmina_ext_exec_type));</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  g_debug(<span class="stringliteral">"[%s] %s"</span>, remmina_ext_exec_type, cmd);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  cmd = <a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(remminafile, cmd);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  g_debug(<span class="stringliteral">"[%s] updated to: %s"</span>, remmina_ext_exec_type, cmd);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (*cmd != 0) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  pcspinner = g_new(<a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a>, 1);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  builder = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">"/org/remmina/Remmina/src/../data/ui/remmina_spinner.glade"</span>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a> = GTK_DIALOG(gtk_builder_get_object(builder, <span class="stringliteral">"DialogSpinner"</span>));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#ae7f4061ced82dace307fb70c08348281">label_pleasewait</a> = GTK_LABEL(GET_OBJECT(<span class="stringliteral">"label_pleasewait"</span>));</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a> = GTK_WIDGET(GET_OBJECT(<span class="stringliteral">"spinner"</span>));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#ab7322b598d596a57d8424d90762c588e">button_cancel</a> = GTK_BUTTON(GET_OBJECT(<span class="stringliteral">"button_cancel"</span>));</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">/* Connect signals */</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  gtk_builder_connect_signals(builder, NULL);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* Exec a predefined command */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  g_shell_parse_argv(cmd, NULL, &argv, &error);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  g_warning(<span class="stringliteral">"%s\n"</span>, error->message);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  g_error_free(error);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">/* Consider using G_SPAWN_SEARCH_PATH_FROM_ENVP (from glib 2.38)*/</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  g_spawn_async( NULL, <span class="comment">// cwd</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  argv, <span class="comment">// argv</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  NULL, <span class="comment">// envp</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  G_SPAWN_SEARCH_PATH |</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  G_SPAWN_SEARCH_PATH_FROM_ENVP |</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  G_SPAWN_DO_NOT_REAP_CHILD, <span class="comment">// flags</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  NULL, <span class="comment">// child_setup</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  NULL, <span class="comment">// child_setup user data</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  &child_pid, <span class="comment">// pid location</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  &error); <span class="comment">// error</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (!error) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  gtk_spinner_start(GTK_SPINNER(pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a>));</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  g_child_watch_add(child_pid, <a class="code" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd">wait_for_child</a>, (gpointer)pcspinner);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  gtk_dialog_run(pcspinner->dialog);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  g_warning(<span class="stringliteral">"Command %s exited with error: %s\n"</span>, cmd, error->message);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  g_error_free(error);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  g_strfreev(argv);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  g_free(cmd);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> (pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  g_free(cmd);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<a href="remmina__ext__exec_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> *</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> *</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> *</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> */</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <gdk/gdkkeysyms.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <glib.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <sys/wait.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__ext__exec_8h.html">remmina_ext_exec.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define SPAWN_TIMEOUT 10</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#define GET_OBJECT(object_name) gtk_builder_get_object(builder, object_name)</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd"> 51</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd">wait_for_child</a>(GPid pid, gint script_retval, gpointer data)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a> *pcspinner = (<a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a>*)data;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  gtk_spinner_stop(GTK_SPINNER(pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a>));</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  gtk_widget_destroy(GTK_WIDGET(pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a>));</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  g_spawn_close_pid(pid);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="comment">/* TODO At the moment background processes will fail to start before the</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="comment"> * remmina connection.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="comment"> * Adding a delay here could be a (not good) solution, or we should</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="comment"> * monitor each child opened, but it could be quit tricky and messy */</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="remmina__ext__exec_8h.html#a7c81795162a70d06294fdf935ea210d7"> 64</a></span> GtkDialog* <a class="code" href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a>* remminafile, <span class="keyword">const</span> <span class="keywordtype">char</span> *remmina_ext_exec_type)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  GtkBuilder *builder;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a> *pcspinner;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  GError *error = NULL;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">char</span> **argv;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  gchar *cmd = NULL;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  gchar pre[11];</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  gchar post[12];</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  GPid child_pid;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  strcpy(pre, <span class="stringliteral">"precommand"</span>);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  strcpy(post, <span class="stringliteral">"postcommand"</span>);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (remmina_ext_exec_type != NULL && (</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  strcmp(remmina_ext_exec_type, pre) |</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  strcmp(remmina_ext_exec_type, post) )) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  cmd = g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, remmina_ext_exec_type));</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  g_debug(<span class="stringliteral">"[%s] %s"</span>, remmina_ext_exec_type, cmd);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  cmd = <a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(remminafile, cmd);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  g_debug(<span class="stringliteral">"[%s] updated to: %s"</span>, remmina_ext_exec_type, cmd);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (*cmd != 0) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  pcspinner = g_new(<a class="code" href="struct_p_con___spinner.html">PCon_Spinner</a>, 1);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  builder = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">"/org/remmina/Remmina/src/../data/ui/remmina_spinner.glade"</span>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a> = GTK_DIALOG(gtk_builder_get_object(builder, <span class="stringliteral">"DialogSpinner"</span>));</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#ae7f4061ced82dace307fb70c08348281">label_pleasewait</a> = GTK_LABEL(GET_OBJECT(<span class="stringliteral">"label_pleasewait"</span>));</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a> = GTK_WIDGET(GET_OBJECT(<span class="stringliteral">"spinner"</span>));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  pcspinner-><a class="code" href="struct_p_con___spinner.html#ab7322b598d596a57d8424d90762c588e">button_cancel</a> = GTK_BUTTON(GET_OBJECT(<span class="stringliteral">"button_cancel"</span>));</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">/* Connect signals */</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  gtk_builder_connect_signals(builder, NULL);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* Exec a predefined command */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  g_shell_parse_argv(cmd, NULL, &argv, &error);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">if</span> (error) {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  g_warning(<span class="stringliteral">"%s\n"</span>, error->message);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  g_error_free(error);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">/* Consider using G_SPAWN_SEARCH_PATH_FROM_ENVP (from glib 2.38)*/</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  g_spawn_async( NULL, <span class="comment">// cwd</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  argv, <span class="comment">// argv</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  NULL, <span class="comment">// envp</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  G_SPAWN_SEARCH_PATH |</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  G_SPAWN_SEARCH_PATH_FROM_ENVP |</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  G_SPAWN_DO_NOT_REAP_CHILD, <span class="comment">// flags</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  NULL, <span class="comment">// child_setup</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  NULL, <span class="comment">// child_setup user data</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  &child_pid, <span class="comment">// pid location</span></div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  &error); <span class="comment">// error</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (!error) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  gtk_spinner_start(GTK_SPINNER(pcspinner-><a class="code" href="struct_p_con___spinner.html#a895fd84ca4c0a4410b90b9690b5af046">spinner</a>));</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  g_child_watch_add(child_pid, <a class="code" href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd">wait_for_child</a>, (gpointer)pcspinner);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  gtk_dialog_run(pcspinner->dialog);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  g_warning(<span class="stringliteral">"Command %s exited with error: %s\n"</span>, cmd, error->message);</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  g_error_free(error);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  g_strfreev(argv);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  g_free(cmd);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> (pcspinner-><a class="code" href="struct_p_con___spinner.html#aa0004e88608c893e343a9a2b3e50f646">dialog</a>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  g_free(cmd);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> <div class="ttc" id="remmina__trace__calls_8h_html"><div class="ttname"><a href="remmina__trace__calls_8h.html">remmina_trace_calls.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00552">remmina_file.c:552</a></div></div> +<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00561">remmina_file.c:561</a></div></div> <div class="ttc" id="remmina__ext__exec_8c_html_a7c81795162a70d06294fdf935ea210d7"><div class="ttname"><a href="remmina__ext__exec_8c.html#a7c81795162a70d06294fdf935ea210d7">remmina_ext_exec_new</a></div><div class="ttdeci">GtkDialog * remmina_ext_exec_new(RemminaFile *remminafile, const char *remmina_ext_exec_type)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ext__exec_8c_source.html#l00064">remmina_ext_exec.c:64</a></div></div> <div class="ttc" id="remmina__utils_8h_html"><div class="ttname"><a href="remmina__utils_8h.html">remmina_utils.h</a></div><div class="ttdoc">General utility functions, non-GTK related. </div></div> <div class="ttc" id="remmina__ext__exec_8c_html_aa063217311c67408819a2c1b86ff92dd"><div class="ttname"><a href="remmina__ext__exec_8c.html#aa063217311c67408819a2c1b86ff92dd">wait_for_child</a></div><div class="ttdeci">static void wait_for_child(GPid pid, gint script_retval, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ext__exec_8c_source.html#l00051">remmina_ext_exec.c:51</a></div></div> diff --git a/public/remmina__external__tools_8c_source.html b/public/remmina__external__tools_8c_source.html index 1ea6c74ea..89f524f3b 100644 --- a/public/remmina__external__tools_8c_source.html +++ b/public/remmina__external__tools_8c_source.html @@ -86,8 +86,8 @@ $(document).ready(function(){initNavTree('remmina__external__tools_8c_source.htm <div class="title">remmina_external_tools.c</div> </div> </div><!--header--> <div class="contents"> -<a href="remmina__external__tools_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2011 Marc-Andre Moreau</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <glib/gstdio.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="remmina__file_8h.html">remmina_file.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="types_8h.html">remmina/types.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__external__tools_8h.html">remmina_external_tools.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(<span class="keyword">const</span> gchar* filename, <span class="keyword">const</span> gchar* scriptname, <span class="keyword">const</span> gchar* shortname);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71"> 47</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71">view_popup_menu_onDoSomething</a>(GtkWidget *menuitem, gpointer userdata)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  gchar *remminafilename = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"remminafilename"</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  gchar *scriptfilename = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"scriptfilename"</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  gchar *scriptshortname = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"scriptshortname"</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(remminafilename, scriptfilename, scriptshortname);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="remmina__external__tools_8h.html#a32c8a5f638e3a38753d43fbeb3094e85"> 57</a></span> gboolean <a class="code" href="remmina__external__tools_8c.html#abe70273f7d1cbab092c6f6017695c56d">remmina_external_tools_from_filename</a>(<a class="code" href="struct___remmina_main.html">RemminaMain</a> *<a class="code" href="remmina__main_8c.html#ab7c680e1f6ffeef21cb928a083d36d89">remminamain</a>, gchar* remminafilename)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GtkWidget *menu, *menuitem;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  gchar dirname[MAX_PATH_LEN];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GDir* dir;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> gchar* name;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  strcpy(dirname, REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  dir = g_dir_open(dirname, 0, NULL);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  menu = gtk_menu_new();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span> (!g_str_has_prefix(name, <span class="stringliteral">"remmina_"</span>))</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, dirname, name);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  menuitem = gtk_menu_item_new_with_label(name + 8);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"remminafilename"</span>, g_strdup(remminafilename), g_free);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"scriptfilename"</span>, g_strdup(filename), g_free);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"scriptshortname"</span>, g_strdup(name), g_free);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  g_signal_connect(menuitem, <span class="stringliteral">"activate"</span>, (GCallback)<a class="code" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71">view_popup_menu_onDoSomething</a>, NULL);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  g_dir_close(dir);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  gtk_widget_show_all(menu);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">/* Note: event can be NULL here when called from view_onPopupMenu;</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> * gdk_event_get_time() accepts a NULL argument</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#if GTK_CHECK_VERSION(3, 22, 0)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, 0);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60"> 102</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(<span class="keyword">const</span> gchar* filename, <span class="keyword">const</span> gchar* scriptname, <span class="keyword">const</span> gchar* shortname)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *env_format = <span class="stringliteral">"%s=%s"</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">char</span> *env;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordtype">size_t</span> envstrlen;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  gchar launcher[MAX_PATH_LEN];</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  g_snprintf(launcher, MAX_PATH_LEN, <span class="stringliteral">"%s/launcher.sh"</span>, REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (!remminafile)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GHashTableIter iter;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer*)&key, (gpointer*)&value)) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  envstrlen = strlen(key) + strlen(value) + strlen(env_format) + 1;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  env = (<span class="keywordtype">char</span>*)malloc(envstrlen);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (env == NULL) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordtype">int</span> retval = snprintf(env, envstrlen, env_format, key, value);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (retval > 0 && (<span class="keywordtype">size_t</span>)retval <= envstrlen) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (putenv(env) != 0) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">/* If putenv fails, we must free the unused space */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  free(env);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">/* Adds the window title for the terminal window */</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *term_title_key = <span class="stringliteral">"remmina_term_title"</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *term_title_val_prefix = <span class="stringliteral">"Remmina external tool"</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  envstrlen = strlen(term_title_key) + strlen(term_title_val_prefix) + strlen(shortname) + 7;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  env = (<span class="keywordtype">char</span>*)malloc(envstrlen);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (env != NULL) {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (snprintf(env, envstrlen, <span class="stringliteral">"%s=%s: %s"</span>, term_title_key, term_title_val_prefix, shortname) ) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (putenv(env) != 0) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">/* If putenv fails, we must free the unused space */</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  free(env);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> cmdlen = strlen(launcher) + strlen(scriptname) + 2;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  gchar *cmd = (gchar*)malloc(cmdlen);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  g_snprintf(cmd, cmdlen, <span class="stringliteral">"%s %s"</span>, launcher, scriptname);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  system(cmd);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  free(cmd);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div><div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<a href="remmina__external__tools_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2011 Marc-Andre Moreau</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <glib/gstdio.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="remmina__file_8h.html">remmina_file.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="types_8h.html">remmina/types.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__external__tools_8h.html">remmina_external_tools.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(<span class="keyword">const</span> gchar* filename, <span class="keyword">const</span> gchar* scriptname, <span class="keyword">const</span> gchar* shortname);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71"> 47</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71">view_popup_menu_onDoSomething</a>(GtkWidget *menuitem, gpointer userdata)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  gchar *remminafilename = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"remminafilename"</span>);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  gchar *scriptfilename = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"scriptfilename"</span>);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  gchar *scriptshortname = g_object_get_data(G_OBJECT(menuitem), <span class="stringliteral">"scriptshortname"</span>);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(remminafilename, scriptfilename, scriptshortname);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="remmina__external__tools_8h.html#a32c8a5f638e3a38753d43fbeb3094e85"> 57</a></span> gboolean <a class="code" href="remmina__external__tools_8c.html#abe70273f7d1cbab092c6f6017695c56d">remmina_external_tools_from_filename</a>(<a class="code" href="struct___remmina_main.html">RemminaMain</a> *<a class="code" href="remmina__main_8c.html#ab7c680e1f6ffeef21cb928a083d36d89">remminamain</a>, gchar* remminafilename)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  GtkWidget *menu, *menuitem;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  gchar dirname[MAX_PATH_LEN];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  GDir* dir;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">const</span> gchar* name;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  strcpy(dirname, REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  dir = g_dir_open(dirname, 0, NULL);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  menu = gtk_menu_new();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span> (!g_str_has_prefix(name, <span class="stringliteral">"remmina_"</span>))</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, dirname, name);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  menuitem = gtk_menu_item_new_with_label(name + 8);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"remminafilename"</span>, g_strdup(remminafilename), g_free);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"scriptfilename"</span>, g_strdup(filename), g_free);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  g_object_set_data_full(G_OBJECT(menuitem), <span class="stringliteral">"scriptshortname"</span>, g_strdup(name), g_free);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  g_signal_connect(menuitem, <span class="stringliteral">"activate"</span>, (GCallback)<a class="code" href="remmina__external__tools_8c.html#aeb0a4182f2137fe0089737b2522add71">view_popup_menu_onDoSomething</a>, NULL);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  g_dir_close(dir);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  gtk_widget_show_all(menu);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">/* Note: event can be NULL here when called from view_onPopupMenu;</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="comment"> * gdk_event_get_time() accepts a NULL argument</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="comment"> */</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor">#if GTK_CHECK_VERSION(3, 22, 0)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, 0);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60"> 102</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a>(<span class="keyword">const</span> gchar* filename, <span class="keyword">const</span> gchar* scriptname, <span class="keyword">const</span> gchar* shortname)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *env_format = <span class="stringliteral">"%s=%s"</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">char</span> *env;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordtype">size_t</span> envstrlen;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  gchar launcher[MAX_PATH_LEN];</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  g_snprintf(launcher, MAX_PATH_LEN, <span class="stringliteral">"%s/launcher.sh"</span>, REMMINA_RUNTIME_EXTERNAL_TOOLS_DIR);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (!remminafile)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  GHashTableIter iter;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer*)&key, (gpointer*)&value)) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  envstrlen = strlen(key) + strlen(value) + strlen(env_format) + 1;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  env = (<span class="keywordtype">char</span>*)malloc(envstrlen);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordflow">if</span> (env == NULL) {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordtype">int</span> retval = snprintf(env, envstrlen, env_format, key, value);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (retval > 0 && (<span class="keywordtype">size_t</span>)retval <= envstrlen) {</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (putenv(env) != 0) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">/* If putenv fails, we must free the unused space */</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  free(env);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">/* Adds the window title for the terminal window */</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *term_title_key = <span class="stringliteral">"remmina_term_title"</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *term_title_val_prefix = <span class="stringliteral">"Remmina external tool"</span>;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  envstrlen = strlen(term_title_key) + strlen(term_title_val_prefix) + strlen(shortname) + 7;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  env = (<span class="keywordtype">char</span>*)malloc(envstrlen);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (env != NULL) {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (snprintf(env, envstrlen, <span class="stringliteral">"%s=%s: %s"</span>, term_title_key, term_title_val_prefix, shortname) ) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (putenv(env) != 0) {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">/* If putenv fails, we must free the unused space */</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  free(env);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keyword">const</span> <span class="keywordtype">size_t</span> cmdlen = strlen(launcher) + strlen(scriptname) + 2;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  gchar *cmd = (gchar*)malloc(cmdlen);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  g_snprintf(cmd, cmdlen, <span class="stringliteral">"%s %s"</span>, launcher, scriptname);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  system(cmd);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  free(cmd);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div><div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="types_8h_html"><div class="ttname"><a href="types_8h.html">types.h</a></div></div> <div class="ttc" id="remmina__external__tools_8c_html_ae32c6ba6b03dffd2ccbf70ea7ab60c60"><div class="ttname"><a href="remmina__external__tools_8c.html#ae32c6ba6b03dffd2ccbf70ea7ab60c60">remmina_external_tools_launcher</a></div><div class="ttdeci">static gboolean remmina_external_tools_launcher(const gchar *filename, const gchar *scriptname, const gchar *shortname)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__external__tools_8c_source.html#l00102">remmina_external_tools.c:102</a></div></div> <div class="ttc" id="remmina__external__tools_8c_html_abe70273f7d1cbab092c6f6017695c56d"><div class="ttname"><a href="remmina__external__tools_8c.html#abe70273f7d1cbab092c6f6017695c56d">remmina_external_tools_from_filename</a></div><div class="ttdeci">gboolean remmina_external_tools_from_filename(RemminaMain *remminamain, gchar *remminafilename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__external__tools_8c_source.html#l00057">remmina_external_tools.c:57</a></div></div> diff --git a/public/remmina__file_8c.html b/public/remmina__file_8c.html index bacde1c24..25a3099df 100644 --- a/public/remmina__file_8c.html +++ b/public/remmina__file_8c.html @@ -202,7 +202,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00231">231</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00235">235</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -222,7 +222,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00213">213</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00217">217</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -242,7 +242,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00900">900</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00909">909</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -262,7 +262,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00854">854</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00863">863</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -292,7 +292,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00888">888</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00897">897</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -322,7 +322,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00552">552</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00561">561</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -342,7 +342,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00700">700</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00709">709</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -397,7 +397,7 @@ Variables</h2></td></tr> <p>This is used to return the modification date of a file and it’s used to return the modification date and time of a given Remmina file. If it fails it will return "Fri, 16 Oct 2009 07:04:46 GMT", that is just a date to don't return an empty string (challenge: what was happened that day at that time?). </p><dl class="section return"><dt>Returns</dt><dd>A date string in the form "%d/%m/%Y %H:%M:%S". </dd></dl> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000004">Todo:</a></b></dt><dd>This should be moved to <a class="el" href="remmina__utils_8c.html">remmina_utils.c</a> </dd></dl> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01020">1020</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01029">1029</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -433,7 +433,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00620">620</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00629">629</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -453,7 +453,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00206">206</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00210">210</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -473,7 +473,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00874">874</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00883">883</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -509,7 +509,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00594">594</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00603">603</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -537,7 +537,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00671">671</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00680">680</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -565,7 +565,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00686">686</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00695">695</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -595,7 +595,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00542">542</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00551">551</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -625,7 +625,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00914">914</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00923">923</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -661,7 +661,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00646">646</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00655">655</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -697,7 +697,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00606">606</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00615">615</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -727,7 +727,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00507">507</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00516">516</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -747,7 +747,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00346">346</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00350">350</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -815,7 +815,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00719">719</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00728">728</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -881,7 +881,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00576">576</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00585">585</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -917,7 +917,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00496">496</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00505">505</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -953,7 +953,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00585">585</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00594">594</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1009,7 +1009,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00463">463</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00469">469</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1029,7 +1029,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00937">937</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00946">946</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1065,7 +1065,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00835">835</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00844">844</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1089,7 +1089,7 @@ Variables</h2></td></tr> <p>Function used to update the atime and mtime of a given remmina file, partially taken from suckless sbase </p><dl class="section see"><dt>See also</dt><dd><a href="https://git.suckless.org/sbase/tree/touch.c">https://git.suckless.org/sbase/tree/touch.c</a> </dd></dl> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000005">Todo:</a></b></dt><dd>This should be moved to <a class="el" href="remmina__utils_8c.html">remmina_utils.c</a> </dd></dl> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01089">1089</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01103">1103</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1109,7 +1109,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00967">967</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00976">976</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1137,7 +1137,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00287">287</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00291">291</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1187,7 +1187,7 @@ Variables</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00261">261</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00265">265</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> diff --git a/public/remmina__file_8c_source.html b/public/remmina__file_8c_source.html index 620ced84a..aede2cf04 100644 --- a/public/remmina__file_8c_source.html +++ b/public/remmina__file_8c_source.html @@ -86,23 +86,23 @@ $(document).ready(function(){initNavTree('remmina__file_8c_source.html','');}); <div class="title">remmina_file.c</div> </div> </div><!--header--> <div class="contents"> -<a href="remmina__file_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <errno.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <fcntl.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <sys/stat.h></span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <locale.h></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <langinfo.h></span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <time.h></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <utime.h></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include <glib/gstdio.h></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "<a class="code" href="remmina__crypt_8h.html">remmina_crypt.h</a>"</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include "<a class="code" href="remmina__main_8h.html">remmina_main.h</a>"</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>"</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "<a class="code" href="remmina__sodium_8h.html">remmina_sodium.h</a>"</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include "<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>"</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#define MIN_WINDOW_WIDTH 10</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#define MIN_WINDOW_HEIGHT 10</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#define KEYFILE_GROUP_REMMINA "remmina"</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#define KEYFILE_GROUP_STATE "Remmina Connection States"</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d"> 73</a></span> <span class="keyword">static</span> <span class="keyword">struct </span>timespec <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[2];</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">static</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa"> 76</a></span> <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  remminafile = g_new0(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a>, 1);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  remminafile->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  remminafile->states = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">/* spsettings contains settings that are loaded from the secure_plugin.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> * it’s used by remmina_file_store_secret_plugin_password() to know</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> * where to change */</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  remminafile->spsettings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  remminafile->prevent_saving = FALSE;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a5e421ba636d34e21bba5ece463e98892"> 93</a></span> <a class="code" href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">/* Try to load from the preference file for default settings first */</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(<a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  remminafile->filename = NULL;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  remminafile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac952f8ddb715314f11cef1ccc513fb7e"> 114</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  gchar *invalid_chars = <span class="stringliteral">"\\%|/$?<>:*. \""</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GString *filenamestr;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">const</span> gchar *s;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">/* functions we can use</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> * g_strstrip( string )</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> * Removes leading and trailing whitespace from a string</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * g_strdelimit (str, invalid_chars, '-'))</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * Convert each invalid_chars in a hyphen</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * g_ascii_strdown(string)</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> * all lowercase</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> * To be safe we should remove control characters as well (but I'm lazy)</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> * https://rosettacode.org/wiki/Strip_control_codes_and_extended_characters_from_a_string#C</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * g_utf8_strncpy (gchar *dest, const gchar *src, gsize n);</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> * copies a given number of characters instead of a given number of bytes. The src string must be valid UTF-8 encoded text.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> * g_utf8_validate (const gchar *str, gssize max_len, const gchar **end);</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * Validates UTF-8 encoded text.</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> */</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="comment">//g_free(remminafile->filename), remminafile->filename = NULL;</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  filenamestr = g_string_new(g_strdup_printf(<span class="stringliteral">"%s"</span>,</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aa1544a98f03088dc260ed98f2deac94f">remmina_file_name</a>));</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>)) == NULL) s = <span class="stringliteral">"name"</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%N"</span>) != NULL)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%N"</span>, s);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>)) == NULL) s = <span class="stringliteral">"group"</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%G"</span>) != NULL)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%G"</span>, s);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>)) == NULL) s = <span class="stringliteral">"proto"</span>;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%P"</span>) != NULL)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%P"</span>, s);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>)) == NULL) s = <span class="stringliteral">"host"</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%h"</span>) != NULL)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%h"</span>, s);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  s = NULL;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  g_autofree gchar *filename = g_strdelimit(g_ascii_strdown(g_strstrip(g_string_free(filenamestr, FALSE)), -1),</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  invalid_chars, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GDir *dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(), 0, NULL);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (dir != NULL)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  remminafile->filename = g_strdup_printf(<span class="stringliteral">"%s/%s.remmina"</span>, <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(), filename);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  remminafile->filename = NULL;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  g_dir_close(dir);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ab03b042504c09c1ad880ac126a703114"> 182</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  remminafile->filename = g_strdup(filename);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#aeefa562baee867fba8c06165ae656de1"> 189</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!remminafile)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  g_free(remminafile->statefile);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  gchar *basename = g_path_get_basename(remminafile->filename);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_cache_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  GString *fname = g_string_new(g_strdup(basename));</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  remminafile->statefile = g_strdup_printf(<span class="stringliteral">"%s/%s.state"</span>, cachedir, fname->str);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad1e4f3a0f64cd98e301044b6c38a1f1d"> 206</a></span> <a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">return</span> remminafile->filename;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1685edf35a793a396ce039d7eec5343"> 213</a></span> <a class="code" href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  gchar *buf;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  buf = g_strdup_printf( <span class="stringliteral">"COPY %s"</span>,</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>));</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"name"</span>, buf);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  g_free(buf);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(remminafile);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99"> 231</a></span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *<a class="code" href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99">find_protocol_setting</a>(<span class="keyword">const</span> gchar *name, <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (protocol_plugin == NULL)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">if</span> (strcmp(name, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter)) == 0)</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">return</span> setting_iter;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  setting_iter++;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aceb00d9dff794500ccb04a1373eb32db">advanced_settings</a>;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">if</span> (strcmp(name, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter)) == 0)</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> setting_iter;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  setting_iter++;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960"> 261</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gboolean protocol_is_ssh, gboolean ssh_enabled, gchar *suffix)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  gchar *src_key;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  gchar *dst_key;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> gchar *val;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  src_key = g_strdup_printf(<span class="stringliteral">"ssh_%s"</span>, suffix);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  dst_key = g_strdup_printf(<span class="stringliteral">"ssh_tunnel_%s"</span>, suffix);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, src_key);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (!val) {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  g_free(dst_key);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  g_free(src_key);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">if</span> (ssh_enabled && val && val[0] != 0)</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, dst_key, val);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (!protocol_is_ssh)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, src_key, NULL);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  g_free(dst_key);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  g_free(src_key);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6"> 287</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> {</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  gboolean protocol_is_ssh;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  gboolean ssh_enabled;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keyword">const</span> gchar *val;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_enabled"</span>)) {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">/* Upgrade ssh params from remmina pre 1.4 */</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  ssh_enabled = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_enabled"</span>, 0);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  protocol_is_ssh = (strcmp(val, <span class="stringliteral">"SSH"</span>) == 0);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"stricthostkeycheck"</span>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"kex_algorithms"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"hostkeytypes"</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"ciphers"</span>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"proxycommand"</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"passphrase"</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"auth"</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"privatekey"</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_loopback"</span>);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_loopback"</span>, val);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_loopback"</span>, NULL);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_username"</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_username"</span>, val);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">if</span> (protocol_is_ssh)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"username"</span>, val);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_username"</span>, NULL);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_password"</span>);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_password"</span>, val);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">if</span> (protocol_is_ssh)</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"password"</span>, val);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_password"</span>, NULL);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_server"</span>);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>, val);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_server"</span>, NULL);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  }</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">/* Real key removal will be done by remmina_file_save() */</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, ssh_enabled);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1cc2d7f827f7d64c7fd3edf10e9383e"> 346</a></span> <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  gchar *key;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  gchar *s;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  gboolean secret_service_available;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordtype">int</span> w, h;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">if</span> (g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, filename, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  REMMINA_DEBUG(<span class="stringliteral">"Unable to load remmina profile file %s: g_key_file_load_from_file() returned NULL.\n"</span>, filename);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">if</span> (!g_key_file_has_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"name"</span>, NULL)) {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  REMMINA_DEBUG(<span class="stringliteral">"Unable to load remmina profile file %s: cannot find key name= in section remmina.\n"</span>, filename);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  remminafile = NULL;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(remminafile);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  remminafile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="comment">/* Identify the protocol plugin and get pointers to its RemminaProtocolSetting structs */</span></div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  gchar *proto = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"protocol"</span>, NULL);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  g_free(proto);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  secret_service_available = secret_plugin && secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(secret_plugin);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  remminafile->filename = g_strdup(filename);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  gsize nkeys = 0;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  gint keyindex;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  GError *err = NULL;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  gchar **keys = g_key_file_get_keys(gkeyfile, KEYFILE_GROUP_REMMINA, &nkeys, &err);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">if</span> (keys == NULL) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  g_clear_error(&err);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">for</span> (keyindex = 0; keyindex < nkeys; ++keyindex) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  key = keys[keyindex];</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="comment">/* It may contain an encrypted password</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="comment"> * - password = . // secret_service</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="comment"> * - password = $argon2id$v=19$m=262144,t=3,p=… // libsodium</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="comment"> */</span></div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">if</span> (protocol_plugin && <a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, key)) {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  s = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="preprocessor">#if 0</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">switch</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a788378c190a4ec0ebcf60c570f3b50d5">enc_mode</a>) {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a90f2025ec8d2c4987db5591e8e3b4076">RM_ENC_MODE_SODIUM_INTERACTIVE</a>:</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53ad5263951640011bc43bd8a31f67a9f8b">RM_ENC_MODE_SODIUM_MODERATE</a>:</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a0378e0f09c7bc6fd7f8d95b3827ad561">RM_ENC_MODE_SODIUM_SENSITIVE</a>:</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="preprocessor">#if SODIUM_VERSION_INT >= 90200</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a315a71c81da464332f675857ae84b880">RM_ENC_MODE_GCRYPT</a>:</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53aa57e81572c52d0ea2bbb8dd90b10651a">RM_ENC_MODE_SECRET</a>:</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span> ((g_strcmp0(s, <span class="stringliteral">"."</span>) == 0) && (secret_service_available)) {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  gchar *sec = secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a34defea2606bbc99a2c334f57e056b06">get_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, sec);</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="comment">/* Annotate in spsettings that this value comes from secret_plugin */</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  g_hash_table_insert(remminafile->spsettings, g_strdup(key), NULL);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  g_free(sec);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  gchar *decrypted;</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  decrypted = <a class="code" href="remmina__crypt_8c.html#a3fe2fa245d401146adf02a3a8f996ab9">remmina_crypt_decrypt</a>(s);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, decrypted);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  g_free(decrypted);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  g_free(s), s = NULL;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">/* If we find "resolution", then we split it in two */</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">if</span> (strcmp(key, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  gchar *resolution_str = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a>(resolution_str, &w, &h)) {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  gchar *buf;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  buf = g_strdup_printf(<span class="stringliteral">"%i"</span>, w); <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_width"</span>, buf); g_free(buf);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  buf = g_strdup_printf(<span class="stringliteral">"%i"</span>, h); <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_height"</span>, buf); g_free(buf);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_width"</span>, NULL);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_height"</span>, NULL);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  g_free(resolution_str);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key,</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL));</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  }</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a>(remminafile);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  g_strfreev(keys);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(remminafile);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> }</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a85ca1ca2d0bf9ef29e490c6f4527a954"> 463</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">/* Allow the execution of this function from a non main thread</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span> <span class="comment"> * (plugins needs it to have user credentials)*/</span></div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_FILE_SET_STRING;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.remminafile = remminafile;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.setting = setting;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.value = value;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  g_free(d);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> </div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">if</span> (value) {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="comment">/* We refuse to accept to set the "resolution" field */</span></div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (strcmp(setting, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="comment">// TRANSLATORS: This is a message that pops up when an external Remmina plugin tries to set the window resolution using a legacy parameter.</span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keyword">const</span> gchar *message = _(<span class="stringliteral">"Using the «resolution» parameter in the Remmina preferences file is deprecated.\n"</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  REMMINA_CRITICAL(message);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a>(message);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  g_hash_table_insert(remminafile->settings, g_strdup(setting), g_strdup(value));</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  g_hash_table_insert(remminafile->settings, g_strdup(setting), g_strdup(<span class="stringliteral">""</span>));</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> }</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a2c41790e4881335bf934b6c10f94f29d"> 496</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">if</span> (value && value[0] != 0)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  g_hash_table_insert(remminafile->states, g_strdup(setting), g_strdup(value));</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  g_hash_table_insert(remminafile->states, g_strdup(setting), g_strdup(<span class="stringliteral">""</span>));</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a8eb1b213d9d08c6ad13683ce05f4355e"> 507</a></span> <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  gchar *value;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="comment">/* Returned value is a pointer to the string stored on the hash table,</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> <span class="comment"> * please do not free it or the hash table will contain invalid pointer */</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="comment">/* Allow the execution of this function from a non main thread</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> <span class="comment"> * (plugins needs it to have user credentials)*/</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">const</span> gchar *retval;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_FILE_GET_STRING;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.remminafile = remminafile;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.setting = setting;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  retval = d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.retval;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  g_free(d);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordflow">return</span> retval;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">if</span> (strcmp(setting, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="comment">// TRANSLATORS: This is a message that pop-up when an external Remmina plugin tries to set the windows resolution using a legacy parameter.</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keyword">const</span> gchar *message = _(<span class="stringliteral">"Using the «resolution» parameter in the Remmina preferences file is deprecated.\n"</span>);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  REMMINA_CRITICAL(message);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <a class="code" href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a>(message);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  value = (gchar *)g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">return</span> value && value[0] ? value : NULL;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> gchar *</div><div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad514c2523ff0c919ddf535e3dbad9f3a"> 542</a></span> <a class="code" href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">/* This function is in the RemminaPluginService table, we cannot remove it</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="comment"> * without breaking plugin API */</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  g_warning(<span class="stringliteral">"remmina_file_get_secret(remminafile,“%s”) is deprecated and must not be called. Use remmina_file_get_string() and do not deallocate returned memory.\n"</span>, setting);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keywordflow">return</span> g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, setting));</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span> </div><div class="line"><a name="l00552"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#afd8b12f3d84b4e201b9f465d5b8e0d03"> 552</a></span> gchar *<a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  gchar *res = NULL;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  GString *fmt_str;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  GDateTime *now;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  gchar *date_str = NULL;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  fmt_str = g_string_new(setting);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%h"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>));</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%t"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>));</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%u"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"username"</span>));</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%U"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_username"</span>));</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%p"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>));</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%g"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>));</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  now = g_date_time_new_now_local();</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  date_str = g_date_time_format(now, <span class="stringliteral">"%FT%TZ"</span>);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%d"</span>, date_str);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  g_free(date_str);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  res = g_string_free(fmt_str, FALSE);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#af153b0d289ac93f6ecdaa15d5f3b9b8c"> 576</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint value)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  g_hash_table_insert(remminafile->settings,</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  g_strdup(setting),</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  g_strdup_printf(<span class="stringliteral">"%i"</span>, value));</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1089fb270a526fa8a4d1bf65ad4d14e"> 585</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint value)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  g_hash_table_insert(remminafile->states,</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  g_strdup(setting),</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  g_strdup_printf(<span class="stringliteral">"%i"</span>, value));</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a4884356c195dcfb4ceacf641a1e74e66"> 594</a></span> gint <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint default_value)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  gchar *value;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  gint r;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  value = g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  r = value == NULL ? default_value : (value[0] == <span class="charliteral">'t'</span> ? TRUE : atoi(value));</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="comment">// TOO verbose: REMMINA_DEBUG ("Integer value is: %d", r);</span></div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> }</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#aba0aa663aaad89e4df41b42259d29841"> 606</a></span> gint <a class="code" href="remmina__file_8c.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint default_value)</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span> {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  gchar *value;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  gint r;</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  value = g_hash_table_lookup(remminafile->states, setting);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  r = value == NULL ? default_value : (value[0] == <span class="charliteral">'t'</span> ? TRUE : atoi(value));</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="comment">// TOO verbose: REMMINA_DEBUG ("Integer value is: %d", r);</span></div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> </div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> <span class="comment">// sscanf uses the set language to convert the float.</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="comment">// therefore '.' and ',' cannot be used interchangeably.</span></div><div class="line"><a name="l00620"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da"> 620</a></span> gdouble <a class="code" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remminafile,</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> gchar * setting,</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  gdouble default_value)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  gchar *value;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  value = g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (!value)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="comment">// str to double.</span></div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="comment">// https://stackoverflow.com/questions/10075294/converting-string-to-a-double-variable-in-c</span></div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  gdouble d;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  gint ret = sscanf(value, <span class="stringliteral">"%lf"</span>, &d);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">if</span> (ret != 1)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="comment">// failed.</span></div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  d = default_value;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="comment">// TOO VERBOSE: REMMINA_DEBUG("Double value is: %lf", d);</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> d;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="comment">// sscanf uses the set language to convert the float.</span></div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> <span class="comment">// therefore '.' and ',' cannot be used interchangeably.</span></div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad2cf2ab34ab748bb984005fdd579d113"> 646</a></span> gdouble <a class="code" href="remmina__file_8c.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remminafile,</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <span class="keyword">const</span> gchar * setting,</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  gdouble default_value)</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span> {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  gchar *value;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  value = g_hash_table_lookup(remminafile->states, setting);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">if</span> (!value)</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="comment">// str to double.</span></div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="comment">// https://stackoverflow.com/questions/10075294/converting-string-to-a-double-variable-in-c</span></div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  gdouble d;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  gint ret = sscanf(value, <span class="stringliteral">"%lf"</span>, &d);</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">if</span> (ret != 1)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="comment">// failed.</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  d = default_value;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="comment">// TOO VERBOSE: REMMINA_DEBUG("Double value is: %lf", d);</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">return</span> d;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> }</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> <span class="keyword">static</span> GKeyFile *</div><div class="line"><a name="l00671"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f"> 671</a></span> <a class="code" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span> {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">if</span> (remminafile->filename == NULL)</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, remminafile->filename, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="comment">/* it will fail if it’s a new file, but shouldn’t matter. */</span></div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  }</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">return</span> gkeyfile;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span> }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> <span class="keyword">static</span> GKeyFile *</div><div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2"> 686</a></span> <a class="code" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (remminafile->statefile == NULL)</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, remminafile->statefile, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="comment">/* it will fail if it’s a new file, but shouldn’t matter. */</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> gkeyfile;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span> }</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"> 700</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> {</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">if</span> (remminafile == NULL)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span> </div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">if</span> (remminafile->filename)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">if</span> (remminafile->statefile)</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  g_free(remminafile->statefile);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (remminafile->settings)</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  g_hash_table_destroy(remminafile->settings);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">if</span> (remminafile->spsettings)</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  g_hash_table_destroy(remminafile->spsettings);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  g_free(remminafile);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a8c893a5deec9bc446bd89cc9973416c7"> 719</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  gboolean secret_service_available;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  GHashTableIter iter;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  gchar *s, *proto, *content;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  gint nopasswdsave;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  GKeyFile *gkeystate;</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  gsize length = 0;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  GError *err = NULL;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">if</span> (remminafile->prevent_saving)</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <span class="keywordflow">if</span> ((gkeyfile = <a class="code" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a>(remminafile)) == NULL)</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> </div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordflow">if</span> ((gkeystate = <a class="code" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a>(remminafile)) == NULL)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  REMMINA_DEBUG(<span class="stringliteral">"Saving profile"</span>);</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="comment">/* get disablepasswordstoring */</span></div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  nopasswdsave = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"disablepasswordstoring"</span>, 0);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="comment">/* Identify the protocol plugin and get pointers to its RemminaProtocolSetting structs */</span></div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  proto = (gchar *)g_hash_table_lookup(remminafile->settings, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  REMMINA_CRITICAL(<span class="stringliteral">"Saving settings for unknown protocol:"</span>, proto);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  secret_service_available = secret_plugin && secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(secret_plugin);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span> </div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value)) {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, key)) {</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">if</span> (remminafile->filename && g_strcmp0(remminafile->filename, <a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>)) {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">if</span> (secret_service_available && nopasswdsave == 0) {</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  REMMINA_DEBUG(<span class="stringliteral">"We have a secret and disablepasswordstoring=0"</span>);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">if</span> (value && value[0]) {</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">if</span> (g_strcmp0(value, <span class="stringliteral">"."</span>) != 0)</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a03fab6fcb013fa87be06d551f936c317">store_password</a>(secret_plugin, remminafile, key, value);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">"."</span>);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#abbe56963e94b1a131f3e6d9bcafce772">delete_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  }</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  REMMINA_DEBUG(<span class="stringliteral">"We have a password and disablepasswordstoring=0"</span>);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">if</span> (value && value[0] && nopasswdsave == 0) {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  s = <a class="code" href="remmina__crypt_8c.html#aa02cf0fed3eb68d6a89815c3ba3bf7b1">remmina_crypt_encrypt</a>(value);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, s);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  g_free(s);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">if</span> (secret_service_available && nopasswdsave == 1) {</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (value && value[0]) {</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">if</span> (g_strcmp0(value, <span class="stringliteral">"."</span>) != 0) {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  REMMINA_DEBUG(<span class="stringliteral">"Deleting the secret in the keyring as disablepasswordstoring=1"</span>);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#abbe56963e94b1a131f3e6d9bcafce772">delete_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">"."</span>);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, value);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  }</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  }</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="comment">/* Avoid storing redundant and deprecated "resolution" field */</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"resolution"</span>, NULL);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="comment">/* Delete old pre-1.4 ssh keys */</span></div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"ssh_enabled"</span>, NULL);</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"save_ssh_server"</span>, NULL);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"save_ssh_username"</span>, NULL);</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="comment">/* Store gkeyfile to disk (password are already sent to keyring) */</span></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  content = g_key_file_to_data(gkeyfile, &length, NULL);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> </div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">if</span> (g_file_set_contents(remminafile->filename, content, length, &err))</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  REMMINA_DEBUG(<span class="stringliteral">"Profile saved"</span>);</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  REMMINA_WARNING(<span class="stringliteral">"Remmina connection profile cannot be saved, with error %d (%s)"</span>, err->code, err->message);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">if</span> (err != NULL)</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  g_error_free(err);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  g_free(content), content = NULL;</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">/* Saving states */</span></div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  g_hash_table_iter_init(&iter, remminafile->states);</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value))</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_STATE, key, value);</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  content = g_key_file_to_data(gkeystate, &length, NULL);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span> (g_file_set_contents(remminafile->statefile, content, length, &err))</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  REMMINA_DEBUG(<span class="stringliteral">"Connection profile states saved"</span>);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  REMMINA_WARNING(<span class="stringliteral">"Remmina connection profile cannot be saved, with error %d (%s)"</span>, err->code, err->message);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">if</span> (err != NULL)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  g_error_free(err);</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  g_free(content), content = NULL;</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  g_key_file_free(gkeystate);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (!<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a994425a04b78282ff40a05580cc9355c">list_refresh_workaround</a>)</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <a class="code" href="remmina__main_8c.html#a5ae0372dafe41f96a09097c07d1b270a">remmina_main_update_file_datetime</a>(remminafile);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span> }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3be28ff7f5a9b44dc47f92b883a85ac5"> 835</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *key, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> {</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="comment">/* Only change the password in the keyring. This function</span></div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span> <span class="comment"> * is a shortcut which avoids updating of date/time of .pref file</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="comment"> * when possible, and is used by the mpchanger */</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *plugin;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">if</span> (g_hash_table_lookup_extended(remminafile->spsettings, g_strdup(key), NULL, NULL)) {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  plugin-><a class="code" href="struct___remmina_secret_plugin.html#a03fab6fcb013fa87be06d551f936c317">store_password</a>(plugin, remminafile, key, value);</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, value);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> }</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00854"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3fb992fced83e0f1c4e4e3c8d2206be5"> 854</a></span> <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span> {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *dupfile;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  GHashTableIter iter;</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> </div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  dupfile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  dupfile->filename = g_strdup(remminafile->filename);</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value))</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(dupfile, key, value);</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(dupfile);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(dupfile);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> dupfile;</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span> }</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00874"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a2feb8e9e32f3ff4e2fac836e67a77331"> 874</a></span> <a class="code" href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span> {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *plugin;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span> </div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>));</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span> (!plugin)</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">return</span> g_strconcat(REMMINA_APP_ID, <span class="stringliteral">"-symbolic"</span>, NULL);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, FALSE) ? plugin-><a class="code" href="struct___remmina_protocol_plugin.html#a8a4c7d195e85a1428abf82e952ff4df3">icon_name_ssh</a> : plugin-><a class="code" href="struct___remmina_protocol_plugin.html#a9552c70a10eea2b8263dbc7d05e2fb10">icon_name</a>;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a52a0986eaf54c9e606ce9cdf8bb57e60"> 888</a></span> <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *new_protocol)</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span> {</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *tmp;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  tmp = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(remminafile);</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  g_free(tmp->filename);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  tmp->filename = NULL;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(tmp, <span class="stringliteral">"protocol"</span>, new_protocol);</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span> }</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div><div class="line"><a name="l00900"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a55f66f2bb81bf427d6837e1adb7fe1d4"> 900</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> {</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <a class="code" href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a>(remminafile);</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  }</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  g_unlink(filename);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> }</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00914"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#af8c58daf7ee71345ae548e7a5332a8f6"> 914</a></span> <a class="code" href="remmina__file_8c.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> {</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  g_autoptr(GError) error = NULL;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  g_autoptr(GKeyFile) key_file = g_key_file_new();</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span> </div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(key_file, remminafile->statefile, G_KEY_FILE_NONE, &error)) {</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">if</span> (!g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NOENT))</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not load the state file. %s"</span>, error->message);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  g_autofree gchar *val = g_key_file_get_string(key_file, KEYFILE_GROUP_STATE, setting, &error);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> </div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="keywordflow">if</span> (val == NULL &&</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  !g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not find \"%s\" in the \"%s\" state file. %s"</span>,</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  setting, remminafile->statefile, error->message);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">return</span> val && val[0] ? val : NULL;</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span> }</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span> </div><div class="line"><a name="l00937"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a493ffa77b862ff3bad9ea951592715a8"> 937</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span> {</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  g_autoptr(GKeyFile) key_statefile = g_key_file_new();</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  g_autoptr(GKeyFile) key_remminafile = g_key_file_new();</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  GError *error = NULL;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span> </div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="keyword">const</span> gchar *date = NULL;</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  GDateTime *d = g_date_time_new_now_utc();</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  date = g_strdup_printf(<span class="stringliteral">"%d%02d%02d"</span>,</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  g_date_time_get_year(d),</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  g_date_time_get_month(d),</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  g_date_time_get_day_of_month(d));</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  g_key_file_set_string(key_statefile, KEYFILE_GROUP_STATE, <span class="stringliteral">"last_success"</span>, date);</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  REMMINA_DEBUG(<span class="stringliteral">"State file %s."</span>, remminafile->statefile);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  <span class="keywordflow">if</span> (!g_key_file_save_to_file(key_statefile, remminafile->statefile, &error)) {</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not save the key file. %s"</span>, error->message);</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  g_error_free(error);</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  error = NULL;</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  }</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="comment">/* Delete old pre-1.5 keys */</span></div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  g_key_file_remove_key(key_remminafile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"last_success"</span>, NULL);</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  REMMINA_DEBUG(<span class="stringliteral">"Last connection made on %s."</span>, date);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span> }</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span> </div><div class="line"><a name="l00967"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a503e53fe49430a5ed310c342c946c014"> 967</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span> {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">/* Delete all saved secrets for this profile */</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span> </div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  gchar *proto;</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"password"</span>, NULL);</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  proto = (gchar *)g_hash_table_lookup(remminafile->settings, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="keywordflow">if</span> (protocol_plugin) {</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="comment">// TOO VERBOSE: g_debug("setting name: %s", setting_iter->name);</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordflow">if</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a> == NULL)</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  g_error(<span class="stringliteral">"Internal error: a setting name in protocol plugin %s is null. Please fix RemminaProtocolSetting struct content."</span>, proto);</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>))</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter), NULL);</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  setting_iter++;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  }</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  }</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aceb00d9dff794500ccb04a1373eb32db">advanced_settings</a>;</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>))</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter), NULL);</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  setting_iter++;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  }</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> }</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> gchar *</div><div class="line"><a name="l01020"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a96abbfdc183d1e82fdffd6445d611ffe"> 1020</a></span> <a class="code" href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> {</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  GFile *file;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  GFileInfo *info;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keyword">struct </span>timeval tv;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keyword">struct </span>tm *ptm;</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordtype">char</span> time_string[256];</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> </div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  guint64 mtime;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">if</span> (remminafile->statefile)</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="comment">//REMMINA_DEBUG ("remminafile->statefile: %s", remminafile->statefile);</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  file = g_file_new_for_path(remminafile->statefile);</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  file = g_file_new_for_path(remminafile->filename);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  info = g_file_query_info(file,</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  G_FILE_ATTRIBUTE_TIME_MODIFIED,</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  G_FILE_QUERY_INFO_NONE,</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  NULL,</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  NULL);</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span> </div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  g_object_unref(file);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> </div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">if</span> (info == NULL) {</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="comment">//REMMINA_DEBUG("could not get time info");</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="comment">// The BDAY "Fri, 16 Oct 2009 07:04:46 GMT"</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  mtime = 1255676686;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="keyword">const</span> gchar *last_success = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"last_success"</span>);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">if</span> (last_success) {</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="comment">//REMMINA_DEBUG ("Last success is %s", last_success);</span></div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  GDateTime *dt;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  dt = g_date_time_new_from_iso8601(g_strconcat(last_success, <span class="stringliteral">"T00:00:00Z"</span>, NULL), NULL);</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">if</span> (dt) {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="comment">//REMMINA_DEBUG("Converting last_success");</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  mtime = g_ascii_strtoull(g_date_time_format(dt, <span class="stringliteral">"%s"</span>), NULL, 10);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  g_date_time_unref(dt);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="comment">//REMMINA_DEBUG("dt was null");</span></div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  mtime = 191543400;</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  }</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  }</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  mtime = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_TIME_MODIFIED);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  g_object_unref(info);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  tv.tv_sec = mtime;</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> </div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  ptm = localtime(&tv.tv_sec);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  strftime(time_string, <span class="keyword">sizeof</span>(time_string), <span class="stringliteral">"%F - %T"</span>, ptm);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  gchar *modtime_string = g_locale_to_utf8(time_string, -1, NULL, NULL, NULL);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">return</span> modtime_string;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01089"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3d19095f74e9b7c92d74f11bd5a39a8c"> 1089</a></span> <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordtype">int</span> fd;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keyword">struct </span>stat st;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keywordtype">int</span> r;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <span class="keywordflow">if</span> ((r = stat(remminafile->statefile, &st)) < 0) {</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  <span class="keywordflow">if</span> (errno != ENOENT)</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  REMMINA_DEBUG(<span class="stringliteral">"stat %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!r) {</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[0] = st.st_atim;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[1] = st.st_mtim;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="keywordflow">if</span> (utimensat(AT_FDCWD, remminafile->statefile, <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>, 0) < 0)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  REMMINA_DEBUG(<span class="stringliteral">"utimensat %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span> </div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keywordflow">if</span> ((fd = open(remminafile->statefile, O_CREAT | O_EXCL, 0644)) < 0)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  REMMINA_DEBUG(<span class="stringliteral">"open %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  close(fd);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span> </div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(remminafile);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> }</div><div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> +<a href="remmina__file_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <errno.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <fcntl.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <sys/stat.h></span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <locale.h></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <langinfo.h></span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <time.h></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <utime.h></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include <glib/gstdio.h></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "<a class="code" href="remmina__crypt_8h.html">remmina_crypt.h</a>"</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include "<a class="code" href="remmina__main_8h.html">remmina_main.h</a>"</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>"</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "<a class="code" href="remmina__sodium_8h.html">remmina_sodium.h</a>"</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor">#include "<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>"</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#define MIN_WINDOW_WIDTH 10</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#define MIN_WINDOW_HEIGHT 10</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#define KEYFILE_GROUP_REMMINA "remmina"</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#define KEYFILE_GROUP_STATE "Remmina Connection States"</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d"> 73</a></span> <span class="keyword">static</span> <span class="keyword">struct </span>timespec <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[2];</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">static</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa"> 76</a></span> <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  remminafile = g_new0(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a>, 1);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  remminafile->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  remminafile->states = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="comment">/* spsettings contains settings that are loaded from the secure_plugin.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="comment"> * it’s used by remmina_file_store_secret_plugin_password() to know</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="comment"> * where to change */</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  remminafile->spsettings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  remminafile->prevent_saving = FALSE;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a5e421ba636d34e21bba5ece463e98892"> 93</a></span> <a class="code" href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">/* Try to load from the preference file for default settings first */</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(<a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  remminafile->filename = NULL;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  remminafile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac952f8ddb715314f11cef1ccc513fb7e"> 114</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  gchar *invalid_chars = <span class="stringliteral">"\\%|/$?<>:*. \""</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  GString *filenamestr;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keyword">const</span> gchar *s;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="comment">/* functions we can use</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> * g_strstrip( string )</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> * Removes leading and trailing whitespace from a string</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * g_strdelimit (str, invalid_chars, '-'))</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * Convert each invalid_chars in a hyphen</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * g_ascii_strdown(string)</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> * all lowercase</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> * To be safe we should remove control characters as well (but I'm lazy)</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> * https://rosettacode.org/wiki/Strip_control_codes_and_extended_characters_from_a_string#C</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * g_utf8_strncpy (gchar *dest, const gchar *src, gsize n);</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> * copies a given number of characters instead of a given number of bytes. The src string must be valid UTF-8 encoded text.</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> * g_utf8_validate (const gchar *str, gssize max_len, const gchar **end);</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * Validates UTF-8 encoded text.</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> */</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="comment">//g_free(remminafile->filename), remminafile->filename = NULL;</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  filenamestr = g_string_new(g_strdup_printf(<span class="stringliteral">"%s"</span>,</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aa1544a98f03088dc260ed98f2deac94f">remmina_file_name</a>));</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>)) == NULL) s = <span class="stringliteral">"name"</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%N"</span>) != NULL)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%N"</span>, s);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>)) == NULL) s = <span class="stringliteral">"group"</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%G"</span>) != NULL)</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%G"</span>, s);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>)) == NULL) s = <span class="stringliteral">"proto"</span>;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%P"</span>) != NULL)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%P"</span>, s);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> ((s = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>)) == NULL) s = <span class="stringliteral">"host"</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (g_strstr_len(filenamestr->str, -1, <span class="stringliteral">"%h"</span>) != NULL)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(filenamestr, <span class="stringliteral">"%h"</span>, s);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  s = NULL;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  g_autofree gchar *filename = g_strdelimit(g_ascii_strdown(g_strstrip(g_string_free(filenamestr, FALSE)), -1),</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  invalid_chars, <span class="charliteral">'-'</span>);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GDir *dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(), 0, NULL);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">if</span> (dir != NULL)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  remminafile->filename = g_strdup_printf(<span class="stringliteral">"%s/%s.remmina"</span>, <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(), filename);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  remminafile->filename = NULL;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  g_dir_close(dir);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ab03b042504c09c1ad880ac126a703114"> 182</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  remminafile->filename = g_strdup(filename);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> }</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#aeefa562baee867fba8c06165ae656de1"> 189</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (!remminafile)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  g_free(remminafile->statefile);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  gchar *basename = g_path_get_basename(remminafile->filename);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_cache_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  GString *fname = g_string_new(basename);</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  remminafile->statefile = g_strdup_printf(<span class="stringliteral">"%s/%s.state"</span>, cachedir, fname->str);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  g_free(cachedir);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  g_string_free(fname, TRUE);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  g_free(basename);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad1e4f3a0f64cd98e301044b6c38a1f1d"> 210</a></span> <a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> remminafile->filename;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1685edf35a793a396ce039d7eec5343"> 217</a></span> <a class="code" href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  gchar *buf;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  buf = g_strdup_printf( <span class="stringliteral">"COPY %s"</span>,</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>));</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"name"</span>, buf);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  g_free(buf);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(remminafile);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99"> 235</a></span> <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *<a class="code" href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99">find_protocol_setting</a>(<span class="keyword">const</span> gchar *name, <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">if</span> (protocol_plugin == NULL)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">if</span> (strcmp(name, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter)) == 0)</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> setting_iter;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  setting_iter++;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  }</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  }</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aceb00d9dff794500ccb04a1373eb32db">advanced_settings</a>;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="keywordflow">if</span> (strcmp(name, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter)) == 0)</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">return</span> setting_iter;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  setting_iter++;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  }</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960"> 265</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gboolean protocol_is_ssh, gboolean ssh_enabled, gchar *suffix)</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  gchar *src_key;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  gchar *dst_key;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keyword">const</span> gchar *val;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  src_key = g_strdup_printf(<span class="stringliteral">"ssh_%s"</span>, suffix);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  dst_key = g_strdup_printf(<span class="stringliteral">"ssh_tunnel_%s"</span>, suffix);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, src_key);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (!val) {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  g_free(dst_key);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  g_free(src_key);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">if</span> (ssh_enabled && val && val[0] != 0)</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, dst_key, val);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!protocol_is_ssh)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, src_key, NULL);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  g_free(dst_key);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  g_free(src_key);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> }</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6"> 291</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  gboolean protocol_is_ssh;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  gboolean ssh_enabled;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">const</span> gchar *val;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_enabled"</span>)) {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">/* Upgrade ssh params from remmina pre 1.4 */</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  ssh_enabled = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_enabled"</span>, 0);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  protocol_is_ssh = (strcmp(val, <span class="stringliteral">"SSH"</span>) == 0);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"stricthostkeycheck"</span>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"kex_algorithms"</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"hostkeytypes"</span>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"ciphers"</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"proxycommand"</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"passphrase"</span>);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"auth"</span>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <a class="code" href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a>(remminafile, protocol_is_ssh, ssh_enabled, <span class="stringliteral">"privatekey"</span>);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_loopback"</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_loopback"</span>, val);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_loopback"</span>, NULL);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_username"</span>);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_username"</span>, val);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">if</span> (protocol_is_ssh)</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"username"</span>, val);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_username"</span>, NULL);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_password"</span>);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_password"</span>, val);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (protocol_is_ssh)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"password"</span>, val);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_password"</span>, NULL);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  val = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_server"</span>);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span> (val) {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>, val);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"ssh_server"</span>, NULL);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="comment">/* Real key removal will be done by remmina_file_save() */</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, ssh_enabled);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00350"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1cc2d7f827f7d64c7fd3edf10e9383e"> 350</a></span> <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  gchar *key;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  gchar *s;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  gboolean secret_service_available;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">int</span> w, h;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">if</span> (g_file_test(filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, filename, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  REMMINA_DEBUG(<span class="stringliteral">"Unable to load remmina profile file %s: g_key_file_load_from_file() returned NULL.\n"</span>, filename);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  }</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">if</span> (!g_key_file_has_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"name"</span>, NULL)) {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  REMMINA_DEBUG(<span class="stringliteral">"Unable to load remmina profile file %s: cannot find key name= in section remmina.\n"</span>, filename);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  remminafile = NULL;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(remminafile);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  remminafile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="comment">/* Identify the protocol plugin and get pointers to its RemminaProtocolSetting structs */</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  gchar *proto = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"protocol"</span>, NULL);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  g_free(proto);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  secret_service_available = secret_plugin && secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(secret_plugin);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  remminafile->filename = g_strdup(filename);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  gsize nkeys = 0;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  gint keyindex;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  GError *err = NULL;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  gchar **keys = g_key_file_get_keys(gkeyfile, KEYFILE_GROUP_REMMINA, &nkeys, &err);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">if</span> (keys == NULL) {</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  g_clear_error(&err);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  }</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">for</span> (keyindex = 0; keyindex < nkeys; ++keyindex) {</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  key = keys[keyindex];</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="comment">/* It may contain an encrypted password</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <span class="comment"> * - password = . // secret_service</span></div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="comment"> * - password = $argon2id$v=19$m=262144,t=3,p=… // libsodium</span></div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="comment"> */</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">if</span> (protocol_plugin && <a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, key)) {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  s = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> <span class="preprocessor">#if 0</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">switch</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a788378c190a4ec0ebcf60c570f3b50d5">enc_mode</a>) {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a90f2025ec8d2c4987db5591e8e3b4076">RM_ENC_MODE_SODIUM_INTERACTIVE</a>:</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53ad5263951640011bc43bd8a31f67a9f8b">RM_ENC_MODE_SODIUM_MODERATE</a>:</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a0378e0f09c7bc6fd7f8d95b3827ad561">RM_ENC_MODE_SODIUM_SENSITIVE</a>:</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> <span class="preprocessor">#if SODIUM_VERSION_INT >= 90200</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a315a71c81da464332f675857ae84b880">RM_ENC_MODE_GCRYPT</a>:</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53aa57e81572c52d0ea2bbb8dd90b10651a">RM_ENC_MODE_SECRET</a>:</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> ((g_strcmp0(s, <span class="stringliteral">"."</span>) == 0) && (secret_service_available)) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  gchar *sec = secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a34defea2606bbc99a2c334f57e056b06">get_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, sec);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <span class="comment">/* Annotate in spsettings that this value comes from secret_plugin */</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  g_hash_table_insert(remminafile->spsettings, g_strdup(key), NULL);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  g_free(sec);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  gchar *decrypted;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  decrypted = <a class="code" href="remmina__crypt_8c.html#a3fe2fa245d401146adf02a3a8f996ab9">remmina_crypt_decrypt</a>(s);</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, decrypted);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  g_free(decrypted);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  g_free(s), s = NULL;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="comment">/* If we find "resolution", then we split it in two */</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keywordflow">if</span> (strcmp(key, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  gchar *resolution_str = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a>(resolution_str, &w, &h)) {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  gchar *buf;</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  buf = g_strdup_printf(<span class="stringliteral">"%i"</span>, w); <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_width"</span>, buf); g_free(buf);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  buf = g_strdup_printf(<span class="stringliteral">"%i"</span>, h); <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_height"</span>, buf); g_free(buf);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_width"</span>, NULL);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"resolution_height"</span>, NULL);</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  g_free(resolution_str);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  gchar *value;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  value = g_key_file_get_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, NULL);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, value);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  g_free(value);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  }</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <a class="code" href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a>(remminafile);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  g_strfreev(keys);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(remminafile);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span> }</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00469"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a85ca1ca2d0bf9ef29e490c6f4527a954"> 469</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="comment">/* Note: setting and value are copied on the heap, so it is responsibility of the caller</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <span class="comment"> * to deallocate them when returning from remmina_file_set_string() if needed */</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="comment">/* Allow the execution of this function from a non main thread</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="comment"> * (plugins needs it to have user credentials)*/</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_FILE_SET_STRING;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.remminafile = remminafile;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.setting = setting;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.value = value;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  g_free(d);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">if</span> (value) {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="comment">/* We refuse to accept to set the "resolution" field */</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">if</span> (strcmp(setting, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="comment">// TRANSLATORS: This is a message that pops up when an external Remmina plugin tries to set the window resolution using a legacy parameter.</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keyword">const</span> gchar *message = _(<span class="stringliteral">"Using the «resolution» parameter in the Remmina preferences file is deprecated.\n"</span>);</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  REMMINA_CRITICAL(message);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a>(message);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  g_hash_table_insert(remminafile->settings, g_strdup(setting), g_strdup(value));</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  g_hash_table_insert(remminafile->settings, g_strdup(setting), g_strdup(<span class="stringliteral">""</span>));</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  }</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a2c41790e4881335bf934b6c10f94f29d"> 505</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">if</span> (value && value[0] != 0)</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  g_hash_table_insert(remminafile->states, g_strdup(setting), g_strdup(value));</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  g_hash_table_insert(remminafile->states, g_strdup(setting), g_strdup(<span class="stringliteral">""</span>));</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> }</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a8eb1b213d9d08c6ad13683ce05f4355e"> 516</a></span> <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  gchar *value;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="comment">/* Returned value is a pointer to the string stored on the hash table,</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> <span class="comment"> * please do not free it or the hash table will contain invalid pointer */</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()) {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="comment">/* Allow the execution of this function from a non main thread</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> <span class="comment"> * (plugins needs it to have user credentials)*/</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> gchar *retval;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  d = (<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *)g_malloc(<span class="keyword">sizeof</span>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a>));</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a> = FUNC_FILE_GET_STRING;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.remminafile = remminafile;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.setting = setting;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(d);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  retval = d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.retval;</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  g_free(d);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">return</span> retval;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  }</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">if</span> (strcmp(setting, <span class="stringliteral">"resolution"</span>) == 0) {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">// TRANSLATORS: This is a message that pop-up when an external Remmina plugin tries to set the windows resolution using a legacy parameter.</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">const</span> gchar *message = _(<span class="stringliteral">"Using the «resolution» parameter in the Remmina preferences file is deprecated.\n"</span>);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  REMMINA_CRITICAL(message);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <a class="code" href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a>(message);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  value = (gchar *)g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> value && value[0] ? value : NULL;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> gchar *</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad514c2523ff0c919ddf535e3dbad9f3a"> 551</a></span> <a class="code" href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="comment">/* This function is in the RemminaPluginService table, we cannot remove it</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> <span class="comment"> * without breaking plugin API */</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  g_warning(<span class="stringliteral">"remmina_file_get_secret(remminafile,“%s”) is deprecated and must not be called. Use remmina_file_get_string() and do not deallocate returned memory.\n"</span>, setting);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> g_strdup(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, setting));</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#afd8b12f3d84b4e201b9f465d5b8e0d03"> 561</a></span> gchar *<a class="code" href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  gchar *res = NULL;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  GString *fmt_str;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  GDateTime *now;</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  gchar *date_str = NULL;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  fmt_str = g_string_new(setting);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%h"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%t"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>));</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%u"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"username"</span>));</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%U"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_username"</span>));</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%p"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>));</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%g"</span>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>));</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  now = g_date_time_new_now_local();</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  date_str = g_date_time_format(now, <span class="stringliteral">"%FT%TZ"</span>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <a class="code" href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a>(fmt_str, <span class="stringliteral">"%d"</span>, date_str);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  g_free(date_str);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  res = g_string_free(fmt_str, FALSE);</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">return</span> res;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span> }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#af153b0d289ac93f6ecdaa15d5f3b9b8c"> 585</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint value)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span> {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  g_hash_table_insert(remminafile->settings,</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  g_strdup(setting),</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  g_strdup_printf(<span class="stringliteral">"%i"</span>, value));</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ac1089fb270a526fa8a4d1bf65ad4d14e"> 594</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint value)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> {</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">if</span> (remminafile)</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  g_hash_table_insert(remminafile->states,</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  g_strdup(setting),</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  g_strdup_printf(<span class="stringliteral">"%i"</span>, value));</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> }</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div><div class="line"><a name="l00603"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a4884356c195dcfb4ceacf641a1e74e66"> 603</a></span> gint <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint default_value)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  gchar *value;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  gint r;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span> </div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  value = g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  r = value == NULL ? default_value : (value[0] == <span class="charliteral">'t'</span> ? TRUE : atoi(value));</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="comment">// TOO verbose: REMMINA_DEBUG ("Integer value is: %d", r);</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#aba0aa663aaad89e4df41b42259d29841"> 615</a></span> gint <a class="code" href="remmina__file_8c.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting, gint default_value)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  gchar *value;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  gint r;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  value = g_hash_table_lookup(remminafile->states, setting);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  r = value == NULL ? default_value : (value[0] == <span class="charliteral">'t'</span> ? TRUE : atoi(value));</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="comment">// TOO verbose: REMMINA_DEBUG ("Integer value is: %d", r);</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> }</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> <span class="comment">// sscanf uses the set language to convert the float.</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="comment">// therefore '.' and ',' cannot be used interchangeably.</span></div><div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da"> 629</a></span> gdouble <a class="code" href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remminafile,</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keyword">const</span> gchar * setting,</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  gdouble default_value)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  gchar *value;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span> </div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  value = g_hash_table_lookup(remminafile->settings, setting);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">if</span> (!value)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="comment">// str to double.</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="comment">// https://stackoverflow.com/questions/10075294/converting-string-to-a-double-variable-in-c</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  gdouble d;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  gint ret = sscanf(value, <span class="stringliteral">"%lf"</span>, &d);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">if</span> (ret != 1)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="comment">// failed.</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  d = default_value;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="comment">// TOO VERBOSE: REMMINA_DEBUG("Double value is: %lf", d);</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">return</span> d;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="comment">// sscanf uses the set language to convert the float.</span></div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span> <span class="comment">// therefore '.' and ',' cannot be used interchangeably.</span></div><div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#ad2cf2ab34ab748bb984005fdd579d113"> 655</a></span> gdouble <a class="code" href="remmina__file_8c.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> * remminafile,</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keyword">const</span> gchar * setting,</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  gdouble default_value)</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> {</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  gchar *value;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  value = g_hash_table_lookup(remminafile->states, setting);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (!value)</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">return</span> default_value;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="comment">// str to double.</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="comment">// https://stackoverflow.com/questions/10075294/converting-string-to-a-double-variable-in-c</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  gdouble d;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  gint ret = sscanf(value, <span class="stringliteral">"%lf"</span>, &d);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (ret != 1)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="comment">// failed.</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  d = default_value;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="comment">// TOO VERBOSE: REMMINA_DEBUG("Double value is: %lf", d);</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">return</span> d;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keyword">static</span> GKeyFile *</div><div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f"> 680</a></span> <a class="code" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span> {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">if</span> (remminafile->filename == NULL)</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, remminafile->filename, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="comment">/* it will fail if it’s a new file, but shouldn’t matter. */</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">return</span> gkeyfile;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> <span class="keyword">static</span> GKeyFile *</div><div class="line"><a name="l00695"></a><span class="lineno"><a class="line" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2"> 695</a></span> <a class="code" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> {</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">if</span> (remminafile->statefile == NULL)</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  gkeyfile = g_key_file_new();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(gkeyfile, remminafile->statefile, G_KEY_FILE_NONE, NULL)) {</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="comment">/* it will fail if it’s a new file, but shouldn’t matter. */</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">return</span> gkeyfile;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> }</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div><div class="line"><a name="l00709"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"> 709</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">if</span> (remminafile == NULL)</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="keywordflow">if</span> (remminafile->filename)</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  g_free(remminafile->filename);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="keywordflow">if</span> (remminafile->statefile)</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  g_free(remminafile->statefile);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">if</span> (remminafile->settings)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  g_hash_table_destroy(remminafile->settings);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">if</span> (remminafile->spsettings)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  g_hash_table_destroy(remminafile->spsettings);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  g_free(remminafile);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span> }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div><div class="line"><a name="l00728"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a8c893a5deec9bc446bd89cc9973416c7"> 728</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span> {</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  gboolean secret_service_available;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  GHashTableIter iter;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  gchar *s, *proto, *content;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  gint nopasswdsave;</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  GKeyFile *gkeyfile;</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  GKeyFile *gkeystate;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  gsize length = 0;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  GError *err = NULL;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (remminafile->prevent_saving)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> ((gkeyfile = <a class="code" href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a>(remminafile)) == NULL)</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> ((gkeystate = <a class="code" href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a>(remminafile)) == NULL)</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  REMMINA_DEBUG(<span class="stringliteral">"Saving profile"</span>);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="comment">/* get disablepasswordstoring */</span></div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  nopasswdsave = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"disablepasswordstoring"</span>, 0);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="comment">/* Identify the protocol plugin and get pointers to its RemminaProtocolSetting structs */</span></div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  proto = (gchar *)g_hash_table_lookup(remminafile->settings, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  REMMINA_CRITICAL(<span class="stringliteral">"Saving settings for unknown protocol:"</span>, proto);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  secret_service_available = secret_plugin && secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(secret_plugin);</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value)) {</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, key)) {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">if</span> (remminafile->filename && g_strcmp0(remminafile->filename, <a class="code" href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a>)) {</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">if</span> (secret_service_available && nopasswdsave == 0) {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  REMMINA_DEBUG(<span class="stringliteral">"We have a secret and disablepasswordstoring=0"</span>);</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">if</span> (value && value[0]) {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">if</span> (g_strcmp0(value, <span class="stringliteral">"."</span>) != 0)</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a03fab6fcb013fa87be06d551f936c317">store_password</a>(secret_plugin, remminafile, key, value);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">"."</span>);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#abbe56963e94b1a131f3e6d9bcafce772">delete_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  REMMINA_DEBUG(<span class="stringliteral">"We have a password and disablepasswordstoring=0"</span>);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (value && value[0] && nopasswdsave == 0) {</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  s = <a class="code" href="remmina__crypt_8c.html#aa02cf0fed3eb68d6a89815c3ba3bf7b1">remmina_crypt_encrypt</a>(value);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, s);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  g_free(s);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">if</span> (secret_service_available && nopasswdsave == 1) {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">if</span> (value && value[0]) {</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="keywordflow">if</span> (g_strcmp0(value, <span class="stringliteral">"."</span>) != 0) {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  REMMINA_DEBUG(<span class="stringliteral">"Deleting the secret in the keyring as disablepasswordstoring=1"</span>);</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#abbe56963e94b1a131f3e6d9bcafce772">delete_password</a>(secret_plugin, remminafile, key);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, <span class="stringliteral">"."</span>);</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  }</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  }</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_REMMINA, key, value);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  }</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="comment">/* Avoid storing redundant and deprecated "resolution" field */</span></div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"resolution"</span>, NULL);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span> </div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="comment">/* Delete old pre-1.4 ssh keys */</span></div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"ssh_enabled"</span>, NULL);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"save_ssh_server"</span>, NULL);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  g_key_file_remove_key(gkeyfile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"save_ssh_username"</span>, NULL);</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">/* Store gkeyfile to disk (password are already sent to keyring) */</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  content = g_key_file_to_data(gkeyfile, &length, NULL);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span> </div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">if</span> (g_file_set_contents(remminafile->filename, content, length, &err))</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  REMMINA_DEBUG(<span class="stringliteral">"Profile saved"</span>);</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  REMMINA_WARNING(<span class="stringliteral">"Remmina connection profile cannot be saved, with error %d (%s)"</span>, err->code, err->message);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span> (err != NULL)</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  g_error_free(err);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  g_free(content), content = NULL;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="comment">/* Saving states */</span></div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  g_hash_table_iter_init(&iter, remminafile->states);</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value))</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  g_key_file_set_string(gkeyfile, KEYFILE_GROUP_STATE, key, value);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  content = g_key_file_to_data(gkeystate, &length, NULL);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="keywordflow">if</span> (g_file_set_contents(remminafile->statefile, content, length, &err))</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  REMMINA_DEBUG(<span class="stringliteral">"Connection profile states saved"</span>);</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  REMMINA_WARNING(<span class="stringliteral">"Remmina connection profile cannot be saved, with error %d (%s)"</span>, err->code, err->message);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">if</span> (err != NULL)</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  g_error_free(err);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  g_free(content), content = NULL;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  g_key_file_free(gkeyfile);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  g_key_file_free(gkeystate);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">if</span> (!<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a994425a04b78282ff40a05580cc9355c">list_refresh_workaround</a>)</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <a class="code" href="remmina__main_8c.html#a5ae0372dafe41f96a09097c07d1b270a">remmina_main_update_file_datetime</a>(remminafile);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> }</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div><div class="line"><a name="l00844"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3be28ff7f5a9b44dc47f92b883a85ac5"> 844</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *key, <span class="keyword">const</span> gchar *value)</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> {</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> </div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">/* Only change the password in the keyring. This function</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="comment"> * is a shortcut which avoids updating of date/time of .pref file</span></div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="comment"> * when possible, and is used by the mpchanger */</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *plugin;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">if</span> (g_hash_table_lookup_extended(remminafile->spsettings, g_strdup(key), NULL, NULL)) {</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  plugin-><a class="code" href="struct___remmina_secret_plugin.html#a03fab6fcb013fa87be06d551f936c317">store_password</a>(plugin, remminafile, key, value);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, key, value);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3fb992fced83e0f1c4e4e3c8d2206be5"> 863</a></span> <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> {</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *dupfile;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  GHashTableIter iter;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keyword">const</span> gchar *key, *value;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  dupfile = <a class="code" href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a>();</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  dupfile->filename = g_strdup(remminafile->filename);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> </div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  g_hash_table_iter_init(&iter, remminafile->settings);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&iter, (gpointer *)&key, (gpointer *)&value))</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(dupfile, key, value);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a>(dupfile);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(dupfile);</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">return</span> dupfile;</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> }</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00883"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a2feb8e9e32f3ff4e2fac836e67a77331"> 883</a></span> <a class="code" href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> {</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *plugin;</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>,</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>));</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">if</span> (!plugin)</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">return</span> g_strconcat(REMMINA_APP_ID, <span class="stringliteral">"-symbolic"</span>, NULL);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, FALSE) ? plugin-><a class="code" href="struct___remmina_protocol_plugin.html#a8a4c7d195e85a1428abf82e952ff4df3">icon_name_ssh</a> : plugin-><a class="code" href="struct___remmina_protocol_plugin.html#a9552c70a10eea2b8263dbc7d05e2fb10">icon_name</a>;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *</div><div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a52a0986eaf54c9e606ce9cdf8bb57e60"> 897</a></span> <a class="code" href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *new_protocol)</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span> {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *tmp;</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  tmp = <a class="code" href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a>(remminafile);</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  g_free(tmp->filename);</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  tmp->filename = NULL;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(tmp, <span class="stringliteral">"protocol"</span>, new_protocol);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">return</span> tmp;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> }</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div><div class="line"><a name="l00909"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a55f66f2bb81bf427d6837e1adb7fe1d4"> 909</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> {</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> </div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <a class="code" href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a>(remminafile);</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  }</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  g_unlink(filename);</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> }</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> </div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> <span class="keyword">const</span> gchar *</div><div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#af8c58daf7ee71345ae548e7a5332a8f6"> 923</a></span> <a class="code" href="remmina__file_8c.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <span class="keyword">const</span> gchar *setting)</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> {</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  g_autoptr(GError) error = NULL;</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  g_autoptr(GKeyFile) key_file = g_key_file_new();</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span> </div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="keywordflow">if</span> (!g_key_file_load_from_file(key_file, remminafile->statefile, G_KEY_FILE_NONE, &error)) {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="keywordflow">if</span> (!g_error_matches(error, G_FILE_ERROR, G_FILE_ERROR_NOENT))</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not load the state file. %s"</span>, error->message);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  }</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  g_autofree gchar *val = g_key_file_get_string(key_file, KEYFILE_GROUP_STATE, setting, &error);</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span> </div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keywordflow">if</span> (val == NULL &&</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  !g_error_matches(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) {</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not find \"%s\" in the \"%s\" state file. %s"</span>,</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  setting, remminafile->statefile, error->message);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  }</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> val && val[0] ? val : NULL;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span> }</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span> </div><div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a493ffa77b862ff3bad9ea951592715a8"> 946</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> {</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span> </div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  g_autoptr(GKeyFile) key_statefile = g_key_file_new();</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  g_autoptr(GKeyFile) key_remminafile = g_key_file_new();</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  GError *error = NULL;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keyword">const</span> gchar *date = NULL;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  GDateTime *d = g_date_time_new_now_utc();</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  date = g_strdup_printf(<span class="stringliteral">"%d%02d%02d"</span>,</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  g_date_time_get_year(d),</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  g_date_time_get_month(d),</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  g_date_time_get_day_of_month(d));</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  g_key_file_set_string(key_statefile, KEYFILE_GROUP_STATE, <span class="stringliteral">"last_success"</span>, date);</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span> </div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  REMMINA_DEBUG(<span class="stringliteral">"State file %s."</span>, remminafile->statefile);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">if</span> (!g_key_file_save_to_file(key_statefile, remminafile->statefile, &error)) {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  REMMINA_CRITICAL(<span class="stringliteral">"Could not save the key file. %s"</span>, error->message);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  g_error_free(error);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  error = NULL;</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  }</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="comment">/* Delete old pre-1.5 keys */</span></div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  g_key_file_remove_key(key_remminafile, KEYFILE_GROUP_REMMINA, <span class="stringliteral">"last_success"</span>, NULL);</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  REMMINA_DEBUG(<span class="stringliteral">"Last connection made on %s."</span>, date);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div><div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a503e53fe49430a5ed310c342c946c014"> 976</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> {</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="comment">/* Delete all saved secrets for this profile */</span></div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span> </div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keyword">const</span> <a class="code" href="struct___remmina_protocol_setting.html">RemminaProtocolSetting</a> *setting_iter;</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *protocol_plugin;</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  gchar *proto;</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  protocol_plugin = NULL;</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span> </div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"password"</span>, NULL);</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span> </div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  proto = (gchar *)g_hash_table_lookup(remminafile->settings, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">if</span> (proto) {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  protocol_plugin = (<a class="code" href="struct___remmina_protocol_plugin.html">RemminaProtocolPlugin</a> *)<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, proto);</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="keywordflow">if</span> (protocol_plugin) {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">basic_settings</a>;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="comment">// TOO VERBOSE: g_debug("setting name: %s", setting_iter->name);</span></div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a> == NULL)</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  g_error(<span class="stringliteral">"Internal error: a setting name in protocol plugin %s is null. Please fix RemminaProtocolSetting struct content."</span>, proto);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>))</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter), NULL);</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  setting_iter++;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  }</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  setting_iter = protocol_plugin-><a class="code" href="struct___remmina_protocol_plugin.html#aceb00d9dff794500ccb04a1373eb32db">advanced_settings</a>;</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">if</span> (setting_iter) {</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordflow">while</span> (setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">type</a> != <a class="code" href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a>) {</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a>(protocol_plugin, setting_iter-><a class="code" href="struct___remmina_protocol_setting.html#ac4cd339607204c5f478727e2a0c04857">name</a>))</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <a class="code" href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a>(setting_iter), NULL);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  setting_iter++;</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  }</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  }</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> gchar *</div><div class="line"><a name="l01029"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a96abbfdc183d1e82fdffd6445d611ffe"> 1029</a></span> <a class="code" href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span> {</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  GFile *file;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  GFileInfo *info;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keyword">struct </span>timeval tv;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keyword">struct </span>tm *ptm;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keywordtype">char</span> time_string[256];</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  gchar *tmps;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span> </div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  guint64 mtime;</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">if</span> (remminafile->statefile)</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="comment">//REMMINA_DEBUG ("remminafile->statefile: %s", remminafile->statefile);</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  file = g_file_new_for_path(remminafile->statefile);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  file = g_file_new_for_path(remminafile->filename);</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span> </div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  info = g_file_query_info(file,</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  G_FILE_ATTRIBUTE_TIME_MODIFIED,</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  G_FILE_QUERY_INFO_NONE,</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  NULL,</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  NULL);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span> </div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  g_object_unref(file);</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">if</span> (info == NULL) {</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <span class="comment">//REMMINA_DEBUG("could not get time info");</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> </div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="comment">// The BDAY "Fri, 16 Oct 2009 07:04:46 GMT"</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  mtime = 1255676686;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keyword">const</span> gchar *last_success = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"last_success"</span>);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">if</span> (last_success) {</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="comment">//REMMINA_DEBUG ("Last success is %s", last_success);</span></div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  GDateTime *dt;</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  tmps = g_strconcat(last_success, <span class="stringliteral">"T00:00:00Z"</span>, NULL);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  dt = g_date_time_new_from_iso8601(tmps, NULL);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  g_free(tmps);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="keywordflow">if</span> (dt) {</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="comment">//REMMINA_DEBUG("Converting last_success");</span></div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  tmps = g_date_time_format(dt, <span class="stringliteral">"%s"</span>);</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  mtime = g_ascii_strtoull(tmps, NULL, 10);</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  g_free(tmps);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  g_date_time_unref(dt);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  <span class="comment">//REMMINA_DEBUG("dt was null");</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  mtime = 191543400;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  }</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  mtime = g_file_info_get_attribute_uint64(info, G_FILE_ATTRIBUTE_TIME_MODIFIED);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  g_object_unref(info);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  }</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> </div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  tv.tv_sec = mtime;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> </div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  ptm = localtime(&tv.tv_sec);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  strftime(time_string, <span class="keyword">sizeof</span>(time_string), <span class="stringliteral">"%F - %T"</span>, ptm);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  gchar *modtime_string = g_locale_to_utf8(time_string, -1, NULL, NULL, NULL);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> </div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordflow">return</span> modtime_string;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span> }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> </div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordtype">void</span></div><div class="line"><a name="l01103"></a><span class="lineno"><a class="line" href="remmina__file_8h.html#a3d19095f74e9b7c92d74f11bd5a39a8c"> 1103</a></span> <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile)</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> {</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <span class="keywordtype">int</span> fd;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="keyword">struct </span>stat st;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="keywordtype">int</span> r;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span> </div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">if</span> ((r = stat(remminafile->statefile, &st)) < 0) {</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">if</span> (errno != ENOENT)</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  REMMINA_DEBUG(<span class="stringliteral">"stat %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!r) {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[0] = st.st_atim;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>[1] = st.st_mtim;</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">if</span> (utimensat(AT_FDCWD, remminafile->statefile, <a class="code" href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a>, 0) < 0)</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  REMMINA_DEBUG(<span class="stringliteral">"utimensat %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  <span class="keywordflow">if</span> ((fd = open(remminafile->statefile, O_CREAT | O_EXCL, 0644)) < 0)</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  REMMINA_DEBUG(<span class="stringliteral">"open %s:"</span>, remminafile->statefile);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  close(fd);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span> </div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(remminafile);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> }</div><div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_af60b8edfa50563ae4c7593efc3deed55"><div class="ttname"><a href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a></div><div class="ttdeci">const gchar * remmina_plugin_manager_get_canonical_setting_name(const RemminaProtocolSetting *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00451">remmina_plugin_manager.c:451</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_aef243c58b9e8c778232d5acb32c7729b"><div class="ttname"><a href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a></div><div class="ttdeci">gboolean remmina_plugin_manager_is_encrypted_setting(RemminaProtocolPlugin *pp, const char *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00629">remmina_plugin_manager.c:629</a></div></div> <div class="ttc" id="remmina__sodium_8h_html"><div class="ttname"><a href="remmina__sodium_8h.html">remmina_sodium.h</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00854">remmina_file.c:854</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00863">remmina_file.c:863</a></div></div> <div class="ttc" id="rcw_8c_html_af657fd4825d16d8d003a8b42fbd0c715"><div class="ttname"><a href="rcw_8c.html#af657fd4825d16d8d003a8b42fbd0c715">remmina_pref_file</a></div><div class="ttdeci">gchar * remmina_pref_file</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00074">rcw.c:74</a></div></div> <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="remmina__crypt_8c_html_a3fe2fa245d401146adf02a3a8f996ab9"><div class="ttname"><a href="remmina__crypt_8c.html#a3fe2fa245d401146adf02a3a8f996ab9">remmina_crypt_decrypt</a></div><div class="ttdeci">gchar * remmina_crypt_decrypt(const gchar *str)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__crypt_8c_source.html#l00134">remmina_crypt.c:134</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> <div class="ttc" id="remmina__file_8c_html_a3793ec19ecbc8c8afc4d1dd8969f880d"><div class="ttname"><a href="remmina__file_8c.html#a3793ec19ecbc8c8afc4d1dd8969f880d">times</a></div><div class="ttdeci">static struct timespec times[2]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00073">remmina_file.c:73</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00888">remmina_file.c:888</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a227276a531775a77d497852ce66ebdd2"><div class="ttname"><a href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a></div><div class="ttdeci">static GKeyFile * remmina_file_get_keystate(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00686">remmina_file.c:686</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00542">remmina_file.c:542</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00897">remmina_file.c:897</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a227276a531775a77d497852ce66ebdd2"><div class="ttname"><a href="remmina__file_8c.html#a227276a531775a77d497852ce66ebdd2">remmina_file_get_keystate</a></div><div class="ttdeci">static GKeyFile * remmina_file_get_keystate(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00695">remmina_file.c:695</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00551">remmina_file.c:551</a></div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html"><div class="ttname"><a href="structremmina__masterthread__exec__data.html">remmina_masterthread_exec_data</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__masterthread__exec_8h_source.html#l00043">remmina_masterthread_exec.h:43</a></div></div> <div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00047">plugin.h:47</a></div></div> <div class="ttc" id="remmina__trace__calls_8h_html"><div class="ttname"><a href="remmina__trace__calls_8h.html">remmina_trace_calls.h</a></div></div> @@ -110,22 +110,22 @@ $(document).ready(function(){initNavTree('remmina__file_8c_source.html','');}); <div class="ttc" id="remmina__plugin__manager_8c_html_ad380a98f6624aa8c830015c8b428b7b4"><div class="ttname"><a href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a></div><div class="ttdeci">RemminaSecretPlugin * remmina_plugin_manager_get_secret_plugin(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00604">remmina_plugin_manager.c:604</a></div></div> <div class="ttc" id="struct___remmina_secret_plugin_html_a2123e14795b104f5fe8d77a4b7847261"><div class="ttname"><a href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">_RemminaSecretPlugin::is_service_available</a></div><div class="ttdeci">gboolean(* is_service_available)(struct _RemminaSecretPlugin *instance)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00144">plugin.h:144</a></div></div> <div class="ttc" id="struct___remmina_secret_plugin_html_abbe56963e94b1a131f3e6d9bcafce772"><div class="ttname"><a href="struct___remmina_secret_plugin.html#abbe56963e94b1a131f3e6d9bcafce772">_RemminaSecretPlugin::delete_password</a></div><div class="ttdeci">void(* delete_password)(struct _RemminaSecretPlugin *instance, RemminaFile *remminafile, const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00147">plugin.h:147</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01020">remmina_file.c:1020</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3feeafd4956b364975aef178ef99b7a6"><div class="ttname"><a href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a></div><div class="ttdeci">static void upgrade_sshkeys_202001(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00287">remmina_file.c:287</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4e31f91e2398f16844f58c1cf13582da"><div class="ttname"><a href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a></div><div class="ttdeci">gdouble remmina_file_get_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00620">remmina_file.c:620</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01029">remmina_file.c:1029</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3feeafd4956b364975aef178ef99b7a6"><div class="ttname"><a href="remmina__file_8c.html#a3feeafd4956b364975aef178ef99b7a6">upgrade_sshkeys_202001</a></div><div class="ttdeci">static void upgrade_sshkeys_202001(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00291">remmina_file.c:291</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4e31f91e2398f16844f58c1cf13582da"><div class="ttname"><a href="remmina__file_8c.html#a4e31f91e2398f16844f58c1cf13582da">remmina_file_get_double</a></div><div class="ttdeci">gdouble remmina_file_get_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00629">remmina_file.c:629</a></div></div> <div class="ttc" id="remmina__file_8c_html_ac952f8ddb715314f11cef1ccc513fb7e"><div class="ttname"><a href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a></div><div class="ttdeci">void remmina_file_generate_filename(RemminaFile *remminafile)</div><div class="ttdoc">Generate a new Remmina connection profile file name. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00114">remmina_file.c:114</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html"><div class="ttname"><a href="struct___remmina_protocol_plugin.html">_RemminaProtocolPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00065">plugin.h:65</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af8c58daf7ee71345ae548e7a5332a8f6"><div class="ttname"><a href="remmina__file_8c.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a></div><div class="ttdeci">const gchar * remmina_file_get_state(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00914">remmina_file.c:914</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af8c58daf7ee71345ae548e7a5332a8f6"><div class="ttname"><a href="remmina__file_8c.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a></div><div class="ttdeci">const gchar * remmina_file_get_state(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00923">remmina_file.c:923</a></div></div> <div class="ttc" id="remmina__main_8h_html"><div class="ttname"><a href="remmina__main_8h.html">remmina_main.h</a></div></div> <div class="ttc" id="remmina__public_8c_html_aaf3fdb980c24cd06965b85ebcdd79173"><div class="ttname"><a href="remmina__public_8c.html#aaf3fdb980c24cd06965b85ebcdd79173">remmina_public_split_resolution_string</a></div><div class="ttdeci">int remmina_public_split_resolution_string(const char *resolution_string, int *w, int *h)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00695">remmina_public.c:695</a></div></div> <div class="ttc" id="remmina__pref_8h_html_ab48899087cc647f0f791ed0c459adc53a90f2025ec8d2c4987db5591e8e3b4076"><div class="ttname"><a href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a90f2025ec8d2c4987db5591e8e3b4076">RM_ENC_MODE_SODIUM_INTERACTIVE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00092">remmina_pref.h:92</a></div></div> <div class="ttc" id="struct___remmina_secret_plugin_html"><div class="ttname"><a href="struct___remmina_secret_plugin.html">_RemminaSecretPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00135">plugin.h:135</a></div></div> -<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00552">remmina_file.c:552</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a1399e5b83aa040b6613cf98be45b4c99"><div class="ttname"><a href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99">find_protocol_setting</a></div><div class="ttdeci">const RemminaProtocolSetting * find_protocol_setting(const gchar *name, RemminaProtocolPlugin *protocol_plugin)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00231">remmina_file.c:231</a></div></div> +<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00561">remmina_file.c:561</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a1399e5b83aa040b6613cf98be45b4c99"><div class="ttname"><a href="remmina__file_8c.html#a1399e5b83aa040b6613cf98be45b4c99">find_protocol_setting</a></div><div class="ttdeci">const RemminaProtocolSetting * find_protocol_setting(const gchar *name, RemminaProtocolPlugin *protocol_plugin)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00235">remmina_file.c:235</a></div></div> <div class="ttc" id="remmina__main_8c_html_a5ae0372dafe41f96a09097c07d1b270a"><div class="ttname"><a href="remmina__main_8c.html#a5ae0372dafe41f96a09097c07d1b270a">remmina_main_update_file_datetime</a></div><div class="ttdeci">void remmina_main_update_file_datetime(RemminaFile *file)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01657">remmina_main.c:1657</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html_a8a4c7d195e85a1428abf82e952ff4df3"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#a8a4c7d195e85a1428abf82e952ff4df3">_RemminaProtocolPlugin::icon_name_ssh</a></div><div class="ttdeci">const gchar * icon_name_ssh</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00073">plugin.h:73</a></div></div> -<div class="ttc" id="remmina__file_8c_html_aba0aa663aaad89e4df41b42259d29841"><div class="ttname"><a href="remmina__file_8c.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a></div><div class="ttdeci">gint remmina_file_get_state_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00606">remmina_file.c:606</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00937">remmina_file.c:937</a></div></div> +<div class="ttc" id="remmina__file_8c_html_aba0aa663aaad89e4df41b42259d29841"><div class="ttname"><a href="remmina__file_8c.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a></div><div class="ttdeci">gint remmina_file_get_state_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00615">remmina_file.c:615</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8c.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00946">remmina_file.c:946</a></div></div> <div class="ttc" id="remmina__utils_8h_html"><div class="ttname"><a href="remmina__utils_8h.html">remmina_utils.h</a></div><div class="ttdoc">General utility functions, non-GTK related. </div></div> <div class="ttc" id="remmina__file_8c_html_aeefa562baee867fba8c06165ae656de1"><div class="ttname"><a href="remmina__file_8c.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a></div><div class="ttdeci">void remmina_file_set_statefile(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00189">remmina_file.c:189</a></div></div> <div class="ttc" id="remmina__file_8c_html_ab03b042504c09c1ad880ac126a703114"><div class="ttname"><a href="remmina__file_8c.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a></div><div class="ttdeci">void remmina_file_set_filename(RemminaFile *remminafile, const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00182">remmina_file.c:182</a></div></div> @@ -134,17 +134,17 @@ $(document).ready(function(){initNavTree('remmina__file_8c_source.html','');}); <div class="ttc" id="remmina__masterthread__exec_8c_html_a3a52e863a3a3da6da6bb5d36c13b7ff4"><div class="ttname"><a href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a></div><div class="ttdeci">gboolean remmina_masterthread_exec_is_main_thread()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__masterthread__exec_8c_source.html#l00147">remmina_masterthread_exec.c:147</a></div></div> <div class="ttc" id="remmina__log_8h_html"><div class="ttname"><a href="remmina__log_8h.html">remmina_log.h</a></div></div> <div class="ttc" id="remmina__crypt_8c_html_aa02cf0fed3eb68d6a89815c3ba3bf7b1"><div class="ttname"><a href="remmina__crypt_8c.html#aa02cf0fed3eb68d6a89815c3ba3bf7b1">remmina_crypt_encrypt</a></div><div class="ttdeci">gchar * remmina_crypt_encrypt(const gchar *str)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__crypt_8c_source.html#l00093">remmina_crypt.c:93</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad2cf2ab34ab748bb984005fdd579d113"><div class="ttname"><a href="remmina__file_8c.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a></div><div class="ttdeci">gdouble remmina_file_get_state_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00646">remmina_file.c:646</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad2cf2ab34ab748bb984005fdd579d113"><div class="ttname"><a href="remmina__file_8c.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a></div><div class="ttdeci">gdouble remmina_file_get_state_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00655">remmina_file.c:655</a></div></div> <div class="ttc" id="remmina__main_8c_html_ad99b9c0bf2fa8c166a8b4a09e06ffdf7"><div class="ttname"><a href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a></div><div class="ttdeci">void remmina_main_show_warning_dialog(const gchar *message)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01674">remmina_main.c:1674</a></div></div> <div class="ttc" id="remmina__pref_8h_html_ab48899087cc647f0f791ed0c459adc53a0378e0f09c7bc6fd7f8d95b3827ad561"><div class="ttname"><a href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53a0378e0f09c7bc6fd7f8d95b3827ad561">RM_ENC_MODE_SODIUM_SENSITIVE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00094">remmina_pref.h:94</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a89ec355adbf6e03ad16d7faf810af46f"><div class="ttname"><a href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a></div><div class="ttdeci">static GKeyFile * remmina_file_get_keyfile(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00671">remmina_file.c:671</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00900">remmina_file.c:900</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a89ec355adbf6e03ad16d7faf810af46f"><div class="ttname"><a href="remmina__file_8c.html#a89ec355adbf6e03ad16d7faf810af46f">remmina_file_get_keyfile</a></div><div class="ttdeci">static GKeyFile * remmina_file_get_keyfile(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00680">remmina_file.c:680</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00909">remmina_file.c:909</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html_aae09a7e2c978cc36e85d0f295518978d"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#aae09a7e2c978cc36e85d0f295518978d">_RemminaProtocolPlugin::basic_settings</a></div><div class="ttdeci">const RemminaProtocolSetting * basic_settings</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00074">plugin.h:74</a></div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_af4aac360c396741c659474158d7c0e87"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">remmina_masterthread_exec_data::file_set_string</a></div><div class="ttdeci">struct remmina_masterthread_exec_data::@12::@17 file_set_string</div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_ac76a0900842e936efdd2add9ec352886"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">remmina_masterthread_exec_data::file_get_string</a></div><div class="ttdeci">struct remmina_masterthread_exec_data::@12::@16 file_get_string</div></div> <div class="ttc" id="remmina__file__manager_8c_html_aa65bc30beb59d607ba430d966e7e27f5"><div class="ttname"><a href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a></div><div class="ttdeci">gchar * remmina_file_get_datadir(void)</div><div class="ttdoc">Return datadir_path from pref or first found data dir as per XDG specs. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00059">remmina_file_manager.c:59</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01089">remmina_file.c:1089</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01103">remmina_file.c:1103</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_ace1098aad45256ac0b0155cb042472e9"><div class="ttname"><a href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a></div><div class="ttdeci">static gchar * cachedir</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00052">remmina_file_manager.c:52</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a994425a04b78282ff40a05580cc9355c"><div class="ttname"><a href="struct___remmina_pref.html#a994425a04b78282ff40a05580cc9355c">_RemminaPref::list_refresh_workaround</a></div><div class="ttdeci">gboolean list_refresh_workaround</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00149">remmina_pref.h:149</a></div></div> <div class="ttc" id="struct___remmina_protocol_setting_html_a6274d44b592a54162ff583135e55ffc9"><div class="ttname"><a href="struct___remmina_protocol_setting.html#a6274d44b592a54162ff583135e55ffc9">_RemminaProtocolSetting::type</a></div><div class="ttdeci">RemminaProtocolSettingType type</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00117">types.h:117</a></div></div> @@ -154,11 +154,11 @@ $(document).ready(function(){initNavTree('remmina__file_8c_source.html','');}); <div class="ttc" id="rcw_8c_html_a29701ae152ba15f6d8921f395174d2df"><div class="ttname"><a href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a></div><div class="ttdeci">RemminaPref remmina_pref</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00075">rcw.c:75</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a788378c190a4ec0ebcf60c570f3b50d5"><div class="ttname"><a href="struct___remmina_pref.html#a788378c190a4ec0ebcf60c570f3b50d5">_RemminaPref::enc_mode</a></div><div class="ttdeci">gint enc_mode</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00194">remmina_pref.h:194</a></div></div> <div class="ttc" id="struct___remmina_pref_html_aa1544a98f03088dc260ed98f2deac94f"><div class="ttname"><a href="struct___remmina_pref.html#aa1544a98f03088dc260ed98f2deac94f">_RemminaPref::remmina_file_name</a></div><div class="ttdeci">const gchar * remmina_file_name</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00135">remmina_pref.h:135</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a2c41790e4881335bf934b6c10f94f29d"><div class="ttname"><a href="remmina__file_8c.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a></div><div class="ttdeci">void remmina_file_set_state(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00496">remmina_file.c:496</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a2c41790e4881335bf934b6c10f94f29d"><div class="ttname"><a href="remmina__file_8c.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a></div><div class="ttdeci">void remmina_file_set_state(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00505">remmina_file.c:505</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__utils_8c_html_ac804e6111e538ee2fa425b8b6fd1fb66"><div class="ttname"><a href="remmina__utils_8c.html#ac804e6111e538ee2fa425b8b6fd1fb66">remmina_utils_string_replace_all</a></div><div class="ttdeci">guint remmina_utils_string_replace_all(GString *haystack, const gchar *needle, const gchar *replace)</div><div class="ttdoc">Replaces all occurrences of needle in haystack with replace. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__utils_8c_source.html#l00193">remmina_utils.c:193</a></div></div> <div class="ttc" id="remmina__crypt_8h_html"><div class="ttname"><a href="remmina__crypt_8h.html">remmina_crypt.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00835">remmina_file.c:835</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00844">remmina_file.c:844</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a3872c8656a8a3d5147bcc603471c1932"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a></div><div class="ttdeci">RemminaPlugin * remmina_plugin_manager_get_plugin(RemminaPluginType type, const gchar *name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00436">remmina_plugin_manager.c:436</a></div></div> <div class="ttc" id="remmina__masterthread__exec_8h_html"><div class="ttname"><a href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a></div></div> <div class="ttc" id="remmina__pref_8h_html"><div class="ttname"><a href="remmina__pref_8h.html">remmina_pref.h</a></div></div> @@ -166,15 +166,15 @@ $(document).ready(function(){initNavTree('remmina__file_8c_source.html','');}); <div class="ttc" id="structremmina__masterthread__exec__data_html_abea1e7f8f2ed7639f59907b622fba688"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">remmina_masterthread_exec_data::p</a></div><div class="ttdeci">union remmina_masterthread_exec_data::@12 p</div></div> <div class="ttc" id="struct___remmina_secret_plugin_html_a34defea2606bbc99a2c334f57e056b06"><div class="ttname"><a href="struct___remmina_secret_plugin.html#a34defea2606bbc99a2c334f57e056b06">_RemminaSecretPlugin::get_password</a></div><div class="ttdeci">gchar *(* get_password)(struct _RemminaSecretPlugin *instance, RemminaFile *remminafile, const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00146">plugin.h:146</a></div></div> <div class="ttc" id="struct___remmina_secret_plugin_html_a03fab6fcb013fa87be06d551f936c317"><div class="ttname"><a href="struct___remmina_secret_plugin.html#a03fab6fcb013fa87be06d551f936c317">_RemminaSecretPlugin::store_password</a></div><div class="ttdeci">void(* store_password)(struct _RemminaSecretPlugin *instance, RemminaFile *remminafile, const gchar *key, const gchar *password)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00145">plugin.h:145</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00213">remmina_file.c:213</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a42231fba69c82eb51a4e210c2de76960"><div class="ttname"><a href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a></div><div class="ttdeci">static void upgrade_sshkeys_202001_mig_common_setting(RemminaFile *remminafile, gboolean protocol_is_ssh, gboolean ssh_enabled, gchar *suffix)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00261">remmina_file.c:261</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00217">remmina_file.c:217</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a42231fba69c82eb51a4e210c2de76960"><div class="ttname"><a href="remmina__file_8c.html#a42231fba69c82eb51a4e210c2de76960">upgrade_sshkeys_202001_mig_common_setting</a></div><div class="ttdeci">static void upgrade_sshkeys_202001_mig_common_setting(RemminaFile *remminafile, gboolean protocol_is_ssh, gboolean ssh_enabled, gchar *suffix)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00265">remmina_file.c:265</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html_a9552c70a10eea2b8263dbc7d05e2fb10"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#a9552c70a10eea2b8263dbc7d05e2fb10">_RemminaProtocolPlugin::icon_name</a></div><div class="ttdeci">const gchar * icon_name</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00072">plugin.h:72</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00098">types.h:98</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00967">remmina_file.c:967</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ac1089fb270a526fa8a4d1bf65ad4d14e"><div class="ttname"><a href="remmina__file_8c.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a></div><div class="ttdeci">void remmina_file_set_state_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00874">remmina_file.c:874</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00976">remmina_file.c:976</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1089fb270a526fa8a4d1bf65ad4d14e"><div class="ttname"><a href="remmina__file_8c.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a></div><div class="ttdeci">void remmina_file_set_state_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00883">remmina_file.c:883</a></div></div> <div class="ttc" id="remmina__file_8c_html_adab087b7139756f029020a87a5438cfa"><div class="ttname"><a href="remmina__file_8c.html#adab087b7139756f029020a87a5438cfa">remmina_file_new_empty</a></div><div class="ttdeci">static RemminaFile * remmina_file_new_empty(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00076">remmina_file.c:76</a></div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_ab3d58f7a9847ce04c9dcd3917910fdb1"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">remmina_masterthread_exec_data::func</a></div><div class="ttdeci">enum remmina_masterthread_exec_data::@11 func</div></div> <div class="ttc" id="remmina__pref_8h_html_ab48899087cc647f0f791ed0c459adc53ad5263951640011bc43bd8a31f67a9f8b"><div class="ttname"><a href="remmina__pref_8h.html#ab48899087cc647f0f791ed0c459adc53ad5263951640011bc43bd8a31f67a9f8b">RM_ENC_MODE_SODIUM_MODERATE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00093">remmina_pref.h:93</a></div></div> diff --git a/public/remmina__file_8h.html b/public/remmina__file_8h.html index a7b1386fa..c15e4e023 100644 --- a/public/remmina__file_8h.html +++ b/public/remmina__file_8h.html @@ -226,7 +226,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00213">213</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00217">217</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -246,7 +246,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00900">900</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00909">909</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -266,7 +266,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00854">854</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00863">863</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -296,7 +296,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00888">888</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00897">897</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -326,7 +326,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00552">552</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00561">561</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -346,7 +346,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00700">700</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00709">709</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -401,7 +401,7 @@ Functions</h2></td></tr> <p>This is used to return the modification date of a file and it’s used to return the modification date and time of a given Remmina file. If it fails it will return "Fri, 16 Oct 2009 07:04:46 GMT", that is just a date to don't return an empty string (challenge: what was happened that day at that time?). </p><dl class="section return"><dt>Returns</dt><dd>A date string in the form "%d/%m/%Y %H:%M:%S". </dd></dl> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000004">Todo:</a></b></dt><dd>This should be moved to <a class="el" href="remmina__utils_8c.html">remmina_utils.c</a> </dd></dl> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01020">1020</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01029">1029</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -421,7 +421,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00206">206</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00210">210</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -441,7 +441,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00874">874</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00883">883</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -477,7 +477,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00594">594</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00603">603</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -507,7 +507,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00542">542</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00551">551</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -537,7 +537,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00914">914</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00923">923</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -573,7 +573,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00646">646</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00655">655</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -609,7 +609,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00606">606</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00615">615</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -657,7 +657,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00507">507</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00516">516</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -677,7 +677,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00346">346</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00350">350</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -745,7 +745,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00719">719</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00728">728</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -811,7 +811,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00576">576</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00585">585</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -847,7 +847,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00496">496</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00505">505</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -883,7 +883,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00585">585</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00594">594</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -939,7 +939,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00463">463</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00469">469</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -959,7 +959,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00937">937</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00946">946</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -995,7 +995,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00835">835</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00844">844</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1019,7 +1019,7 @@ Functions</h2></td></tr> <p>Function used to update the atime and mtime of a given remmina file, partially taken from suckless sbase </p><dl class="section see"><dt>See also</dt><dd><a href="https://git.suckless.org/sbase/tree/touch.c">https://git.suckless.org/sbase/tree/touch.c</a> </dd></dl> <dl class="todo"><dt><b><a class="el" href="todo.html#_todo000005">Todo:</a></b></dt><dd>This should be moved to <a class="el" href="remmina__utils_8c.html">remmina_utils.c</a> </dd></dl> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01089">1089</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l01103">1103</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> @@ -1039,7 +1039,7 @@ Functions</h2></td></tr> </table> </div><div class="memdoc"> -<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00967">967</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> +<p class="definition">Definition at line <a class="el" href="remmina__file_8c_source.html#l00976">976</a> of file <a class="el" href="remmina__file_8c_source.html">remmina_file.c</a>.</p> </div> </div> diff --git a/public/remmina__file_8h_source.html b/public/remmina__file_8h_source.html index e7896a170..88ea79624 100644 --- a/public/remmina__file_8h_source.html +++ b/public/remmina__file_8h_source.html @@ -91,47 +91,47 @@ $(document).ready(function(){initNavTree('remmina__file_8h_source.html','');}); <div class="ttc" id="types_8h_html"><div class="ttname"><a href="types_8h.html">types.h</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00071">remmina_file.h:71</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8h.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00900">remmina_file.c:900</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8h.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00909">remmina_file.c:909</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04ace3e7d92bcc601166da74981deacb0f8">SSH_AUTH_KBDINTERACTIVE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00073">remmina_file.h:73</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8h.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01089">remmina_file.c:1089</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8h.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01103">remmina_file.c:1103</a></div></div> <div class="ttc" id="struct___remmina_file_html_ab09e90eeed7d342e4654daad6acdf0fb"><div class="ttname"><a href="struct___remmina_file.html#ab09e90eeed7d342e4654daad6acdf0fb">_RemminaFile::statefile</a></div><div class="ttdeci">gchar * statefile</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00049">remmina_file.h:49</a></div></div> <div class="ttc" id="struct___remmina_file_html_a756cb639b6ccf103705814e85ec1968f"><div class="ttname"><a href="struct___remmina_file.html#a756cb639b6ccf103705814e85ec1968f">_RemminaFile::states</a></div><div class="ttdeci">GHashTable * states</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00051">remmina_file.h:51</a></div></div> <div class="ttc" id="remmina__file_8h_html_a5e421ba636d34e21bba5ece463e98892"><div class="ttname"><a href="remmina__file_8h.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a></div><div class="ttdeci">RemminaFile * remmina_file_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00093">remmina_file.c:93</a></div></div> <div class="ttc" id="remmina__file_8h_html_a1943b63633f87fd2db0a710341c4827b"><div class="ttname"><a href="remmina__file_8h.html#a1943b63633f87fd2db0a710341c4827b">remmina_file_remove_key</a></div><div class="ttdeci">gboolean remmina_file_remove_key(RemminaFile *remminafile, const gchar *setting)</div></div> -<div class="ttc" id="remmina__file_8h_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8h.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00213">remmina_file.c:213</a></div></div> -<div class="ttc" id="remmina__file_8h_html_ad2cf2ab34ab748bb984005fdd579d113"><div class="ttname"><a href="remmina__file_8h.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a></div><div class="ttdeci">gdouble remmina_file_get_state_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00646">remmina_file.c:646</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8h.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00888">remmina_file.c:888</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8h.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00217">remmina_file.c:217</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ad2cf2ab34ab748bb984005fdd579d113"><div class="ttname"><a href="remmina__file_8h.html#ad2cf2ab34ab748bb984005fdd579d113">remmina_file_get_state_double</a></div><div class="ttdeci">gdouble remmina_file_get_state_double(RemminaFile *remminafile, const gchar *setting, gdouble default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00655">remmina_file.c:655</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8h.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00897">remmina_file.c:897</a></div></div> <div class="ttc" id="remmina__file_8h_html_aeefa562baee867fba8c06165ae656de1"><div class="ttname"><a href="remmina__file_8h.html#aeefa562baee867fba8c06165ae656de1">remmina_file_set_statefile</a></div><div class="ttdeci">void remmina_file_set_statefile(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00189">remmina_file.c:189</a></div></div> -<div class="ttc" id="remmina__file_8h_html_af8c58daf7ee71345ae548e7a5332a8f6"><div class="ttname"><a href="remmina__file_8h.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a></div><div class="ttdeci">const gchar * remmina_file_get_state(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00914">remmina_file.c:914</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8h.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00937">remmina_file.c:937</a></div></div> -<div class="ttc" id="remmina__file_8h_html_ac1089fb270a526fa8a4d1bf65ad4d14e"><div class="ttname"><a href="remmina__file_8h.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a></div><div class="ttdeci">void remmina_file_set_state_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8h.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01020">remmina_file.c:1020</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8h.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00835">remmina_file.c:835</a></div></div> +<div class="ttc" id="remmina__file_8h_html_af8c58daf7ee71345ae548e7a5332a8f6"><div class="ttname"><a href="remmina__file_8h.html#af8c58daf7ee71345ae548e7a5332a8f6">remmina_file_get_state</a></div><div class="ttdeci">const gchar * remmina_file_get_state(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00923">remmina_file.c:923</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a493ffa77b862ff3bad9ea951592715a8"><div class="ttname"><a href="remmina__file_8h.html#a493ffa77b862ff3bad9ea951592715a8">remmina_file_state_last_success</a></div><div class="ttdeci">void remmina_file_state_last_success(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00946">remmina_file.c:946</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ac1089fb270a526fa8a4d1bf65ad4d14e"><div class="ttname"><a href="remmina__file_8h.html#ac1089fb270a526fa8a4d1bf65ad4d14e">remmina_file_set_state_int</a></div><div class="ttdeci">void remmina_file_set_state_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8h.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01029">remmina_file.c:1029</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8h.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00844">remmina_file.c:844</a></div></div> <div class="ttc" id="struct___remmina_file_html_af70ba06ac6baad2b128d4818a4aa6488"><div class="ttname"><a href="struct___remmina_file.html#af70ba06ac6baad2b128d4818a4aa6488">_RemminaFile::prevent_saving</a></div><div class="ttdeci">gboolean prevent_saving</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00053">remmina_file.h:53</a></div></div> -<div class="ttc" id="remmina__file_8h_html_aba0aa663aaad89e4df41b42259d29841"><div class="ttname"><a href="remmina__file_8h.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a></div><div class="ttdeci">gint remmina_file_get_state_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00606">remmina_file.c:606</a></div></div> +<div class="ttc" id="remmina__file_8h_html_aba0aa663aaad89e4df41b42259d29841"><div class="ttname"><a href="remmina__file_8h.html#aba0aa663aaad89e4df41b42259d29841">remmina_file_get_state_int</a></div><div class="ttdeci">gint remmina_file_get_state_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00615">remmina_file.c:615</a></div></div> <div class="ttc" id="remmina__file_8h_html_ab03b042504c09c1ad880ac126a703114"><div class="ttname"><a href="remmina__file_8h.html#ab03b042504c09c1ad880ac126a703114">remmina_file_set_filename</a></div><div class="ttdeci">void remmina_file_set_filename(RemminaFile *remminafile, const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00182">remmina_file.c:182</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00069">remmina_file.h:69</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a2c41790e4881335bf934b6c10f94f29d"><div class="ttname"><a href="remmina__file_8h.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a></div><div class="ttdeci">void remmina_file_set_state(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00496">remmina_file.c:496</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a2c41790e4881335bf934b6c10f94f29d"><div class="ttname"><a href="remmina__file_8h.html#a2c41790e4881335bf934b6c10f94f29d">remmina_file_set_state</a></div><div class="ttdeci">void remmina_file_set_state(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00505">remmina_file.c:505</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a6264a71469928ad51fa802f65f1a934a">SSH_AUTH_GSSAPI</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00072">remmina_file.h:72</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8h.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00854">remmina_file.c:854</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8h.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8h.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00863">remmina_file.c:863</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8h.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__file_8h_html_ac952f8ddb715314f11cef1ccc513fb7e"><div class="ttname"><a href="remmina__file_8h.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a></div><div class="ttdeci">void remmina_file_generate_filename(RemminaFile *remminafile)</div><div class="ttdoc">Generate a new Remmina connection profile file name. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00114">remmina_file.c:114</a></div></div> -<div class="ttc" id="remmina__file_8h_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8h.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8h_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8h.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a7d995a7868d2d2f81e9dd2f898b206fe">SSH_AUTH_PASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00068">remmina_file.h:68</a></div></div> -<div class="ttc" id="remmina__file_8h_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8h.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> -<div class="ttc" id="remmina__file_8h_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8h.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00552">remmina_file.c:552</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8h.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8h.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8h.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00967">remmina_file.c:967</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8h.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00874">remmina_file.c:874</a></div></div> -<div class="ttc" id="remmina__file_8h_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8h.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> +<div class="ttc" id="remmina__file_8h_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8h.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> +<div class="ttc" id="remmina__file_8h_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8h.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00561">remmina_file.c:561</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8h.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8h.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8h.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00976">remmina_file.c:976</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8h.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00883">remmina_file.c:883</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8h.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> <div class="ttc" id="struct___remmina_file_html_a5edb4595f0c83cae611b557bfba02a07"><div class="ttname"><a href="struct___remmina_file.html#a5edb4595f0c83cae611b557bfba02a07">_RemminaFile::filename</a></div><div class="ttdeci">gchar * filename</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00047">remmina_file.h:47</a></div></div> <div class="ttc" id="struct___remmina_file_html"><div class="ttname"><a href="struct___remmina_file.html">_RemminaFile</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00046">remmina_file.h:46</a></div></div> -<div class="ttc" id="remmina__file_8h_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8h.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00542">remmina_file.c:542</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8h.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00551">remmina_file.c:551</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a39a8dcea793c406f0fe90f3175c4318e">SSH_AUTH_AGENT</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00070">remmina_file.h:70</a></div></div> -<div class="ttc" id="remmina__file_8h_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8h.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8h_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8h.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="struct___remmina_file_html_aa090f1969b90157a3df6067e8e13ffcd"><div class="ttname"><a href="struct___remmina_file.html#aa090f1969b90157a3df6067e8e13ffcd">_RemminaFile::settings</a></div><div class="ttdeci">GHashTable * settings</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00050">remmina_file.h:50</a></div></div> -<div class="ttc" id="remmina__file_8h_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8h.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8h_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8h.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> diff --git a/public/remmina__file__editor_8c_source.html b/public/remmina__file__editor_8c_source.html index 48e0308d2..d05c07128 100644 --- a/public/remmina__file__editor_8c_source.html +++ b/public/remmina__file__editor_8c_source.html @@ -90,10 +90,10 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="remmina__public_8c_html_af9c70a727bfeb32730b98ce5cf7a3739"><div class="ttname"><a href="remmina__public_8c.html#af9c70a727bfeb32730b98ce5cf7a3739">remmina_public_create_group</a></div><div class="ttdeci">void remmina_public_create_group(GtkGrid *grid, const gchar *group, gint row, gint rows, gint cols)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00249">remmina_public.c:249</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_af60b8edfa50563ae4c7593efc3deed55"><div class="ttname"><a href="remmina__plugin__manager_8c.html#af60b8edfa50563ae4c7593efc3deed55">remmina_plugin_manager_get_canonical_setting_name</a></div><div class="ttdeci">const gchar * remmina_plugin_manager_get_canonical_setting_name(const RemminaProtocolSetting *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00451">remmina_plugin_manager.c:451</a></div></div> <div class="ttc" id="remmina__string__list_8c_html_a11147c41297537effe55f18a63ce9f7e"><div class="ttname"><a href="remmina__string__list_8c.html#a11147c41297537effe55f18a63ce9f7e">remmina_string_list_new</a></div><div class="ttdeci">GtkDialog * remmina_string_list_new(gboolean two_columns, const gchar *fields_separator)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__list_8c_source.html#l00280">remmina_string_list.c:280</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="struct___remmina_plugin_html"><div class="ttname"><a href="struct___remmina_plugin.html">_RemminaPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00056">plugin.h:56</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="remmina__pref_8c_html_a745bbef1d48a7462f8db997821742395"><div class="ttname"><a href="remmina__pref_8c.html#a745bbef1d48a7462f8db997821742395">remmina_pref_keymap_groups</a></div><div class="ttdeci">gchar ** remmina_pref_keymap_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01067">remmina_pref.c:1067</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_afad358c6e3a5918416c6eb036157d8e5"><div class="ttname"><a href="remmina__file__editor_8c.html#afad358c6e3a5918416c6eb036157d8e5">remmina_file_editor_create_resolution</a></div><div class="ttdeci">static void remmina_file_editor_create_resolution(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting, GtkWidget *grid, gint row)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00538">remmina_file_editor.c:538</a></div></div> <div class="ttc" id="remmina__ssh_8h_html"><div class="ttname"><a href="remmina__ssh_8h.html">remmina_ssh.h</a></div></div> @@ -101,7 +101,7 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="remmina__file__editor_8c_html_af253834273229ac38c6fdfe613626965"><div class="ttname"><a href="remmina__file__editor_8c.html#af253834273229ac38c6fdfe613626965">remmina_file_editor_create_combo</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_combo(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00715">remmina_file_editor.c:715</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04a9f6024449a620d679eab2c09ea77877e">SSH_AUTH_AUTO_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00071">remmina_file.h:71</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ab4c68b7df42ebd08e953cc72c5b97583">REMMINA_PROTOCOL_SETTING_TYPE_INT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00112">types.h:112</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00854">remmina_file.c:854</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3fb992fced83e0f1c4e4e3c8d2206be5"><div class="ttname"><a href="remmina__file_8c.html#a3fb992fced83e0f1c4e4e3c8d2206be5">remmina_file_dup</a></div><div class="ttdeci">RemminaFile * remmina_file_dup(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00863">remmina_file.c:863</a></div></div> <div class="ttc" id="remmina__public_8c_html_a9ec86f1e9caea5ebc867a90230d6b51a"><div class="ttname"><a href="remmina__public_8c.html#a9ec86f1e9caea5ebc867a90230d6b51a">remmina_public_create_combo_entry</a></div><div class="ttdeci">GtkWidget * remmina_public_create_combo_entry(const gchar *text, const gchar *def, gboolean descending)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00063">remmina_public.c:63</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a73b8581fd1fd77532b748d91a2951f25"><div class="ttname"><a href="remmina__file__editor_8c.html#a73b8581fd1fd77532b748d91a2951f25">remmina_file_editor_on_connect</a></div><div class="ttdeci">static void remmina_file_editor_on_connect(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01741">remmina_file_editor.c:1741</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a52a80f3f9b84e9e0d0bf3335cfd7527f">REMMINA_PROTOCOL_SETTING_TYPE_CHECK</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00109">types.h:109</a></div></div> @@ -114,7 +114,7 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_ac47032c150cbdb7bf691059b4e3eb9d0"><div class="ttname"><a href="remmina__file__editor_8c.html#ac47032c150cbdb7bf691059b4e3eb9d0">remmina_file_editor_create_int</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_int(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gint value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00829">remmina_file_editor.c:829</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a8a7f3ce69255bf413ef8fa841af3d019"><div class="ttname"><a href="remmina__file__editor_8c.html#a8a7f3ce69255bf413ef8fa841af3d019">remmina_file_editor_ssh_tunnel_enabled_check_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_enabled_check_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00367">remmina_file_editor.c:367</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a9266544ca3a532b9a02d985c18113e80"><div class="ttname"><a href="remmina__file__editor_8c.html#a9266544ca3a532b9a02d985c18113e80">remmina_file_editor_create_double</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_double(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, gdouble value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00871">remmina_file_editor.c:871</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_ac9b7c0ba5ece064548bcaf72d1b0425a"><div class="ttname"><a href="remmina__file__editor_8c.html#ac9b7c0ba5ece064548bcaf72d1b0425a">remmina_file_editor_create_select</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_select(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gpointer *list, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00693">remmina_file_editor.c:693</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> @@ -166,9 +166,9 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="types_8h_html_a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef"><div class="ttname"><a href="types_8h.html#a373ddef8221457d86c64830c26d3f78aa60de6896fa451ca072d23fab21dbfeef">RES_USE_INITIAL_WINDOW_SIZE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00151">types.h:151</a></div></div> <div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7ab0449f571d03e46b99b301792a5d8e1a">REMMINA_PROTOCOL_SSH_SETTING_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00129">types.h:129</a></div></div> <div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7">RemminaProtocolSSHSetting</a></div><div class="ttdeci">RemminaProtocolSSHSetting</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00127">types.h:127</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00107">types.h:107</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00900">remmina_file.c:900</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00909">remmina_file.c:909</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a287b79ac0e199393f391655ab5cbb55b"><div class="ttname"><a href="remmina__file__editor_8c.html#a287b79ac0e199393f391655ab5cbb55b">remmina_file_editor_entry_on_changed</a></div><div class="ttdeci">static void remmina_file_editor_entry_on_changed(GtkEditable *editable, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01871">remmina_file_editor.c:1871</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a8cec1e80676c945f10bf39aca671d0a0"><div class="ttname"><a href="remmina__file__editor_8c.html#a8cec1e80676c945f10bf39aca671d0a0">remmina_file_editor_create_text2</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text2(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gint left, gint right, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00617">remmina_file_editor.c:617</a></div></div> <div class="ttc" id="remmina__file_8h_html_abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930"><div class="ttname"><a href="remmina__file_8h.html#abc6126af1d45847bc59afa0aa3216b04aeba5f4ff7657d7b15519556793ee8930">SSH_AUTH_PUBLICKEY</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8h_source.html#l00069">remmina_file.h:69</a></div></div> @@ -202,7 +202,7 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="rcw_8c_html_a29701ae152ba15f6d8921f395174d2df"><div class="ttname"><a href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a></div><div class="ttdeci">RemminaPref remmina_pref</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00075">rcw.c:75</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a3866832d550ceac91d608900df4c8056"><div class="ttname"><a href="remmina__file__editor_8c.html#a3866832d550ceac91d608900df4c8056">remmina_file_editor_file_save</a></div><div class="ttdeci">void remmina_file_editor_file_save(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01888">remmina_file_editor.c:1888</a></div></div> <div class="ttc" id="struct___remmina_file_editor_html"><div class="ttname"><a href="struct___remmina_file_editor.html">_RemminaFileEditor</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8h_source.html#l00056">remmina_file_editor.h:56</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02032">remmina_file_editor.c:2032</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a880e8e6aee571b91eeb7f5d2f60e210b"><div class="ttname"><a href="remmina__file__editor_8c.html#a880e8e6aee571b91eeb7f5d2f60e210b">remmina_file_editor_on_realize</a></div><div class="ttdeci">static void remmina_file_editor_on_realize(GtkWidget *widget, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00268">remmina_file_editor.c:268</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a112a0fd5bf7d5693b9cb717c850637cb"><div class="ttname"><a href="remmina__file__editor_8c.html#a112a0fd5bf7d5693b9cb717c850637cb">remmina_file_editor_button_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_button_on_toggled(GtkToggleButton *togglebutton, GtkWidget *widget)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00293">remmina_file_editor.c:293</a></div></div> @@ -218,14 +218,14 @@ $(document).ready(function(){initNavTree('remmina__file__editor_8c_source.html', <div class="ttc" id="remmina__file__manager_8c_html_a536edeef371d907ab3936f4d65c3003d"><div class="ttname"><a href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a></div><div class="ttdeci">gchar * remmina_file_manager_get_groups(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00209">remmina_file_manager.c:209</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a31ee66fffaa245ae411aba0c296ad9da">REMMINA_PROTOCOL_SETTING_TYPE_FILE</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00110">types.h:110</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a072de27e64368581e8507d3b795bfbf4"><div class="ttname"><a href="remmina__file__editor_8c.html#a072de27e64368581e8507d3b795bfbf4">remmina_file_editor_create_text</a></div><div class="ttdeci">static GtkWidget * remmina_file_editor_create_text(RemminaFileEditor *gfe, GtkWidget *grid, gint row, gint col, const gchar *label, const gchar *value, gchar *setting_name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00651">remmina_file_editor.c:651</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a4c16a6793828893598bc0a158bb13cbb"><div class="ttname"><a href="remmina__file__editor_8c.html#a4c16a6793828893598bc0a158bb13cbb">remmina_file_editor_save_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_save_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01377">remmina_file_editor.c:1377</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a9bcaeec3ba26d31c6333f35fe1381a8c"><div class="ttname"><a href="remmina__file__editor_8c.html#a9bcaeec3ba26d31c6333f35fe1381a8c">remmina_file_editor_create_behavior_tab</a></div><div class="ttdeci">static void remmina_file_editor_create_behavior_tab(RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01073">remmina_file_editor.c:1073</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a51b9fe336d9068ffc488ef55adc9eac4"><div class="ttname"><a href="remmina__file__editor_8c.html#a51b9fe336d9068ffc488ef55adc9eac4">remmina_file_editor_browse_resolution</a></div><div class="ttdeci">static void remmina_file_editor_browse_resolution(GtkWidget *button, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00522">remmina_file_editor.c:522</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a8c1924fd32be943136d147e8dedb3eca"><div class="ttname"><a href="remmina__file__editor_8c.html#a8c1924fd32be943136d147e8dedb3eca">remmina_file_editor_validate_settings</a></div><div class="ttdeci">static gboolean remmina_file_editor_validate_settings(RemminaFileEditor *gfe, gchar *setting_name_to_validate, gconstpointer value, GError **err)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01452">remmina_file_editor.c:1452</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_a5ea3f796c3a46aeb01b2f13f4a3d40a9"><div class="ttname"><a href="remmina__file__editor_8c.html#a5ea3f796c3a46aeb01b2f13f4a3d40a9">remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled</a></div><div class="ttdeci">static void remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled(GtkToggleButton *togglebutton, RemminaFileEditor *gfe)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l00357">remmina_file_editor.c:357</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00213">remmina_file.c:213</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1685edf35a793a396ce039d7eec5343"><div class="ttname"><a href="remmina__file_8c.html#ac1685edf35a793a396ce039d7eec5343">remmina_file_copy</a></div><div class="ttdeci">RemminaFile * remmina_file_copy(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00217">remmina_file.c:217</a></div></div> <div class="ttc" id="types_8h_html_a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd"><div class="ttname"><a href="types_8h.html#a64c62354cc2b7baa50e1d73dcd3df9c7a2f71ac2987eeec94430308f6f36840cd">REMMINA_PROTOCOL_SSH_SETTING_REVERSE_TUNNEL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00131">types.h:131</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_af7b58659604660eb0cb40b0e0f8348ab"><div class="ttname"><a href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a></div><div class="ttdeci">RemminaFile * remmina_file_manager_load_file(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00355">remmina_file_manager.c:355</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_afc37e2e9dbe8f0c8bcf1a76d0c54ea1b"><div class="ttname"><a href="remmina__file__editor_8c.html#afc37e2e9dbe8f0c8bcf1a76d0c54ea1b">remmina_file_editor_iterate_protocol</a></div><div class="ttdeci">static gboolean remmina_file_editor_iterate_protocol(gchar *protocol, RemminaPlugin *plugin, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l01839">remmina_file_editor.c:1839</a></div></div> diff --git a/public/remmina__file__manager_8c_source.html b/public/remmina__file__manager_8c_source.html index 2b6cb8d98..808fbc5fb 100644 --- a/public/remmina__file__manager_8c_source.html +++ b/public/remmina__file__manager_8c_source.html @@ -87,10 +87,10 @@ $(document).ready(function(){initNavTree('remmina__file__manager_8c_source.html' </div><!--header--> <div class="contents"> <a href="remmina__file__manager_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2010 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <errno.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="remmina__string__array_8h.html">remmina_string_array.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482"> 51</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9"> 52</a></span> <span class="keyword">static</span> gchar *<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#aa65bc30beb59d607ba430d966e7e27f5"> 59</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">const</span> gchar *dir = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="comment">/* From preferences, datadir_path */</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL && strlen(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>) > 0)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">/* Legacy ~/.remmina */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), dir, NULL);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="comment">/* ~/.local/share/remmina */</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">/* /usr/local/share/remmina */</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR))</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="comment">/* The last case we use the home ~/.local/share/remmina */</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3"> 97</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *src_path, <span class="keyword">const</span> <span class="keywordtype">char</span> *dst_path)</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> {</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  GFile *src = g_file_new_for_path(src_path), *dst = g_file_new_for_path(dst_path);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">/* We don’t overwrite the target if it exists */</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keyword">const</span> gboolean ok = g_file_copy(src, dst, G_FILE_COPY_NONE, NULL, NULL, NULL, NULL);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  g_object_unref(dst);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  g_object_unref(src);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="keywordflow">return</span> ok;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#afa2b1889dced4289b0f7d7edffc82e72"> 116</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#afa2b1889dced4289b0f7d7edffc82e72">remmina_file_manager_init</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  GDir *dir;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> gchar *legacy = <span class="stringliteral">".remmina"</span>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> gchar *filename;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = <a class="code" href="remmina__pref_8c.html#a6bcbf4cc3a58ed4ee9f087b4270d8fd6">remmina_pref_get_value</a>(<span class="stringliteral">"datadir_path"</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0) {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="comment">/* Get and create the XDG_DATA_HOME directory */</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0750) == 0)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  REMMINA_DEBUG(<span class="stringliteral">"Initialized the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  REMMINA_CRITICAL(<span class="stringliteral">"Cannot create the \"%s\" data folder"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">/* Create the XDG_CACHE_HOME directory */</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_user_cache_dir(), <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  g_mkdir_with_parents(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>, 0750);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a>), <a class="code" href="remmina__file__manager_8c.html#ace1098aad45256ac0b0155cb042472e9">cachedir</a> = NULL;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">/* Empty legacy ~/.remmina */</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, g_get_home_dir(), legacy, NULL);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  }</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="comment">/* XDG_DATA_DIRS, i.e. /usr/local/share/remmina */</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">const</span> gchar *<span class="keyword">const</span> *dirs = g_get_system_data_dirs();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">for</span> (i = 0; dirs[i] != NULL; ++i) {</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = g_build_path(<span class="stringliteral">"/"</span>, dirs[i], <span class="stringliteral">"remmina"</span>, NULL);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">if</span> (g_file_test(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, G_FILE_TEST_IS_DIR)) {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  dir = g_dir_open(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, 0, NULL);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">while</span> ((filename = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="remmina__file__manager_8c.html#a4d6280ce5d9e70ceb43dd24639d843d3">remmina_file_manager_do_copy</a>(</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  g_build_path(<span class="stringliteral">"/"</span>, <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>, filename, NULL),</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  g_build_path(<span class="stringliteral">"/"</span>, g_get_user_data_dir(),</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="stringliteral">"remmina"</span>, filename, NULL));</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  }</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="comment">/* At last we make sure we use XDG_USER_DATA */</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> != NULL)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  g_free(<a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a>), <a class="code" href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a> = NULL;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a55a717aafc046713380bd2c55f29165a"> 177</a></span> gint <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>(GFunc func, gpointer user_data)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  GDir *dir;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  gint items_count = 0;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gchar *remmina_data_dir;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  dir = g_dir_open(remmina_data_dir, 0, NULL);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">if</span> (dir) {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  remmina_data_dir, name);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  (*func)(remminafile, user_data);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  items_count++;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  g_dir_close(dir);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  g_free(remmina_data_dir);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keywordflow">return</span> items_count;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a536edeef371d907ab3936f4d65c3003d"> 209</a></span> gchar *<a class="code" href="remmina__file__manager_8c.html#a536edeef371d907ab3936f4d65c3003d">remmina_file_manager_get_groups</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  GDir *dir;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="remmina__string__array_8h.html#a62228cb0bc959307e3268cff98e1f7bb">RemminaStringArray</a> *array;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  gchar *groups;</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  gchar *remmina_data_dir;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  remmina_data_dir = <a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  array = <a class="code" href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  dir = g_dir_open(remmina_data_dir, 0, NULL);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, remmina_data_dir, name);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (group && <a class="code" href="remmina__string__array_8c.html#ab93a69850cfb4117c223a3f145ced986">remmina_string_array_find</a>(array, group) < 0)</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <a class="code" href="remmina__string__array_8c.html#a2aaacca7db4b86f836486cfb559398f0">remmina_string_array_add</a>(array, group);</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  }</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  g_dir_close(dir);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <a class="code" href="remmina__string__array_8c.html#a3eab4bae72ff130ad10ec8fc7364ce70">remmina_string_array_sort</a>(array);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  groups = <a class="code" href="remmina__string__array_8c.html#a96f7bec7ce32de6cf5deadcd5aec51ec">remmina_string_array_to_string</a>(array);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a>(array);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  g_free(remmina_data_dir);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">return</span> groups;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> }</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66"> 248</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>, <span class="keyword">const</span> gchar *group)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  gint cmp;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  gchar *p1;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  gchar *p2;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  GNode *child;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  gboolean found;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (node == NULL)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> </div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (group == NULL || group[0] == <span class="charliteral">'\0'</span>)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  p1 = g_strdup(group);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  p2 = strchr(p1, <span class="charliteral">'/'</span>);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keywordflow">if</span> (p2)</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  *p2++ = <span class="charliteral">'\0'</span>;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  found = FALSE;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child)) {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  cmp = g_strcmp0(((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)child->data)->name, p1);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keywordflow">if</span> (cmp == 0) {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  found = TRUE;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  }</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (cmp > 0)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!found) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  data = g_new0(<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a>, 1);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  data->name = p1;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> (node->data)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  data->group = g_strdup_printf(<span class="stringliteral">"%s/%s"</span>, ((<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data)->group, p1);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  data->group = g_strdup(p1);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (child)</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  child = g_node_insert_data_before(node, child, data);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  child = g_node_append_data(node, data);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(child, p2);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">if</span> (found)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  g_free(p1);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a6593a3f297f420f012405fa582819857"> 302</a></span> GNode *<a class="code" href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  gchar filename[MAX_PATH_LEN];</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  GDir *dir;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  g_autofree gchar *datadir = NULL;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">const</span> gchar *name;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  GNode *root;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  root = g_node_new(NULL);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  datadir = g_strdup(<a class="code" href="remmina__file__manager_8c.html#aa65bc30beb59d607ba430d966e7e27f5">remmina_file_get_datadir</a>());</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  dir = g_dir_open(datadir, 0, NULL);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">if</span> (dir == NULL)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">while</span> ((name = g_dir_read_name(dir)) != NULL) {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">if</span> (!g_str_has_suffix(name, <span class="stringliteral">".remmina"</span>))</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  g_snprintf(filename, MAX_PATH_LEN, <span class="stringliteral">"%s/%s"</span>, datadir, name);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <a class="code" href="remmina__file__manager_8c.html#a3b100405380ddccce98669a8b46ecc66">remmina_file_manager_add_group</a>(root, group);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  g_dir_close(dir);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">return</span> root;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#a06196f19abc15526514a5aa59a568798"> 335</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  GNode *child;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">if</span> (!node)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  data = (<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  if (data) {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  g_free(data->name);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  g_free(data->group);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  g_free(data);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  node->data = NULL;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child))</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(child);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  g_node_unlink(node);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="remmina__file__manager_8h.html#af7b58659604660eb0cb40b0e0f8348ab"> 355</a></span> <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *<a class="code" href="remmina__file__manager_8c.html#af7b58659604660eb0cb40b0e0f8348ab">remmina_file_manager_load_file</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = NULL;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="struct___remmina_file_plugin.html">RemminaFilePlugin</a> *plugin;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  gchar *p;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">if</span> ((p = strrchr(filename, <span class="charliteral">'.'</span>)) != NULL && g_strcmp0(p + 1, <span class="stringliteral">"remmina"</span>) == 0) {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(filename);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#a859348bddc9069f06195915692b65076">remmina_plugin_manager_get_import_file_handler</a>(filename);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (plugin)</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  remminafile = plugin-><a class="code" href="struct___remmina_file_plugin.html#a597178a88c755ebe0614897b7aa279b1">import_func</a>(plugin, filename);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  }</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordflow">return</span> remminafile;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> }</div><div class="ttc" id="remmina__file__manager_8h_html_a0155f52ba9a28e2aa0ea5d831f5d2c90"><div class="ttname"><a href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a></div><div class="ttdeci">G_BEGIN_DECLS struct _RemminaGroupData RemminaGroupData</div></div> -<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="remmina__string__array_8h_html_a62228cb0bc959307e3268cff98e1f7bb"><div class="ttname"><a href="remmina__string__array_8h.html#a62228cb0bc959307e3268cff98e1f7bb">RemminaStringArray</a></div><div class="ttdeci">G_BEGIN_DECLS typedef GPtrArray RemminaStringArray</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8h_source.html#l00041">remmina_string_array.h:41</a></div></div> <div class="ttc" id="remmina__file__manager_8c_html_af83917dac9f2646670733215ba7a3482"><div class="ttname"><a href="remmina__file__manager_8c.html#af83917dac9f2646670733215ba7a3482">remminadir</a></div><div class="ttdeci">static gchar * remminadir</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__manager_8c_source.html#l00051">remmina_file_manager.c:51</a></div></div> <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> diff --git a/public/remmina__ftp__client_8c_source.html b/public/remmina__ftp__client_8c_source.html index bfd67b625..551067b3d 100644 --- a/public/remmina__ftp__client_8c_source.html +++ b/public/remmina__ftp__client_8c_source.html @@ -155,7 +155,7 @@ $(document).ready(function(){initNavTree('remmina__ftp__client_8c_source.html',' <div class="ttc" id="remmina__ftp__client_8c_html_a3a2dc5070f06ae0fcd25fbfe1587ab5c"><div class="ttname"><a href="remmina__ftp__client_8c.html#a3a2dc5070f06ae0fcd25fbfe1587ab5c">remmina_ftp_client_dir_on_activate</a></div><div class="ttdeci">static void remmina_ftp_client_dir_on_activate(GtkWidget *widget, RemminaFTPClient *client)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8c_source.html#l00362">remmina_ftp_client.c:362</a></div></div> <div class="ttc" id="remmina__ftp__client_8c_html_a1ef77e687209d258ec576c31614ea60f"><div class="ttname"><a href="remmina__ftp__client_8c.html#a1ef77e687209d258ec576c31614ea60f">remmina_ftp_client_set_dir</a></div><div class="ttdeci">void remmina_ftp_client_set_dir(RemminaFTPClient *client, const gchar *dir)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8c_source.html#l01146">remmina_ftp_client.c:1146</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_ab04a0655cd1e3bcac5e8f48c18df1a57ae94ee43f3b29b3b955ffbb5ac0a116ba"><div class="ttname"><a href="remmina__ftp__client_8h.html#ab04a0655cd1e3bcac5e8f48c18df1a57ae94ee43f3b29b3b955ffbb5ac0a116ba">REMMINA_FTP_TASK_COLUMN_NAME</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00104">remmina_ftp_client.h:104</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="remmina__ftp__client_8c_html_adc29c2ff13d900c2f185ee95427fb06ca11012a1ab54537707da11f4e4eb902c0"><div class="ttname"><a href="remmina__ftp__client_8c.html#adc29c2ff13d900c2f185ee95427fb06ca11012a1ab54537707da11f4e4eb902c0">NEW_TASK_SIGNAL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8c_source.html#l00158">remmina_ftp_client.c:158</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_a0411cd49bb5b71852cecd93bcbf0ca2da59857d62a8f1ff623da4d6895d81142d"><div class="ttname"><a href="remmina__ftp__client_8h.html#a0411cd49bb5b71852cecd93bcbf0ca2da59857d62a8f1ff623da4d6895d81142d">REMMINA_FTP_TASK_TYPE_DOWNLOAD</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00091">remmina_ftp_client.h:91</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_a726ca809ffd3d67ab4b8476646f26635acf54e8ad0d63c5fec8592d849b04ab50"><div class="ttname"><a href="remmina__ftp__client_8h.html#a726ca809ffd3d67ab4b8476646f26635acf54e8ad0d63c5fec8592d849b04ab50">REMMINA_FTP_FILE_COLUMN_GROUP</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00083">remmina_ftp_client.h:83</a></div></div> @@ -180,7 +180,7 @@ $(document).ready(function(){initNavTree('remmina__ftp__client_8c_source.html',' <div class="ttc" id="remmina__ftp__client_8h_html_a726ca809ffd3d67ab4b8476646f26635ad3c5b62f4cfbb22a06e68d773791bc96"><div class="ttname"><a href="remmina__ftp__client_8h.html#a726ca809ffd3d67ab4b8476646f26635ad3c5b62f4cfbb22a06e68d773791bc96">REMMINA_FTP_FILE_COLUMN_NAME</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00080">remmina_ftp_client.h:80</a></div></div> <div class="ttc" id="remmina__ftp__client_8c_html_a79fcc8693c4264aadb53d36149fae18b"><div class="ttname"><a href="remmina__ftp__client_8c.html#a79fcc8693c4264aadb53d36149fae18b">remmina_cell_renderer_pixbuf_get_type</a></div><div class="ttdeci">GType remmina_cell_renderer_pixbuf_get_type(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8c_source.html#l00072">remmina_ftp_client.c:72</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_ab04a0655cd1e3bcac5e8f48c18df1a57af7133a563aaa2c5615bc886086aea625"><div class="ttname"><a href="remmina__ftp__client_8h.html#ab04a0655cd1e3bcac5e8f48c18df1a57af7133a563aaa2c5615bc886086aea625">REMMINA_FTP_TASK_COLUMN_REMOTEDIR</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00108">remmina_ftp_client.h:108</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_ab04a0655cd1e3bcac5e8f48c18df1a57a41f3b0defe5205fd1dd01884a33a29ed"><div class="ttname"><a href="remmina__ftp__client_8h.html#ab04a0655cd1e3bcac5e8f48c18df1a57a41f3b0defe5205fd1dd01884a33a29ed">REMMINA_FTP_TASK_COLUMN_TOOLTIP</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00112">remmina_ftp_client.h:112</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_a726ca809ffd3d67ab4b8476646f26635a5a1276e4baa54cc04e4f88084cdc6316"><div class="ttname"><a href="remmina__ftp__client_8h.html#a726ca809ffd3d67ab4b8476646f26635a5a1276e4baa54cc04e4f88084cdc6316">REMMINA_FTP_FILE_COLUMN_MODIFIED</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00085">remmina_ftp_client.h:85</a></div></div> <div class="ttc" id="remmina__ftp__client_8h_html_ab04a0655cd1e3bcac5e8f48c18df1a57a6d6919118fabe46fb812391b820c66bf"><div class="ttname"><a href="remmina__ftp__client_8h.html#ab04a0655cd1e3bcac5e8f48c18df1a57a6d6919118fabe46fb812391b820c66bf">REMMINA_FTP_TASK_COLUMN_STATUS</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8h_source.html#l00110">remmina_ftp_client.h:110</a></div></div> diff --git a/public/remmina__main_8c_source.html b/public/remmina__main_8c_source.html index 0ebcce2f9..58ab7d9fb 100644 --- a/public/remmina__main_8c_source.html +++ b/public/remmina__main_8c_source.html @@ -87,16 +87,16 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); </div><!--header--> <div class="contents"> <a href="remmina__main_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <ctype.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include <gio/gio.h></span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <gio/gdesktopappinfo.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include <gdk/gdkkeysyms.h></span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina_8h.html">remmina.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="remmina__string__array_8h.html">remmina_string_array.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="remmina__file_8h.html">remmina_file.h</a>"</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__editor_8h.html">remmina_file_editor.h</a>"</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="rcw_8h.html">rcw.h</a>"</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "<a class="code" href="remmina__about_8h.html">remmina_about.h</a>"</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref__dialog_8h.html">remmina_pref_dialog.h</a>"</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="remmina__widget__pool_8h.html">remmina_widget_pool.h</a>"</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#include "<a class="code" href="remmina__icon_8h.html">remmina_icon.h</a>"</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include "<a class="code" href="remmina__main_8h.html">remmina_main.h</a>"</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#include "<a class="code" href="remmina__exec_8h.html">remmina_exec.h</a>"</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#include "<a class="code" href="remmina__mpchange_8h.html">remmina_mpchange.h</a>"</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#include "<a class="code" href="remmina__external__tools_8h.html">remmina_external_tools.h</a>"</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#include "<a class="code" href="remmina__unlock_8h.html">remmina_unlock.h</a>"</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ab7c680e1f6ffeef21cb928a083d36d89"> 66</a></span> <span class="keyword">static</span> <a class="code" href="struct___remmina_main.html">RemminaMain</a> *<a class="code" href="remmina__main_8c.html#ab7c680e1f6ffeef21cb928a083d36d89">remminamain</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="preprocessor">#define RM_GET_OBJECT(object_name) gtk_builder_get_object(remminamain->builder, object_name)</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445"> 71</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445">PROTOCOL_COLUMN</a>,</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c"> 72</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>,</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b"> 73</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>,</div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c129f382d9456db6f671e1e6e99d32f"> 74</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c129f382d9456db6f671e1e6e99d32f">SERVER_COLUMN</a>,</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ad68c7d7d2f1cfe0321e87c4a833a0756"> 75</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ad68c7d7d2f1cfe0321e87c4a833a0756">PLUGIN_COLUMN</a>,</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb"> 76</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a>,</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d"> 77</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>,</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454"> 78</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454">LABELS_COLUMN</a>,</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3"> 79</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3">NOTES_COLUMN</a>,</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ac70d28409ca79aa291cc0e58244f1fe4"> 80</a></span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ac70d28409ca79aa291cc0e58244f1fe4">N_COLUMNS</a></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> };</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">static</span></div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12"> 84</a></span> <span class="keyword">const</span> gchar *<a class="code" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[] = {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="stringliteral">"x-scheme-handler/rdp"</span>,</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="stringliteral">"x-scheme-handler/spice"</span>,</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="stringliteral">"x-scheme-handler/vnc"</span>,</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="stringliteral">"x-scheme-handler/remmina"</span>,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="stringliteral">"application/x-remmina"</span>,</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  NULL</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> };</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a923b3e2712d969eb59d9291e99f933e8"> 93</a></span> <span class="keyword">static</span> GActionEntry <a class="code" href="remmina__main_8c.html#a923b3e2712d969eb59d9291e99f933e8">app_actions</a>[] = {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  { <span class="stringliteral">"about"</span>, <a class="code" href="remmina__main_8c.html#aac0bb51159be042fecab0103e73a54dc">remmina_main_on_action_application_about</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  { <span class="stringliteral">"news"</span>, <a class="code" href="remmina__main_8c.html#a0b4ec1e78b79adaa180a385ac50c20d6">remmina_main_on_action_application_news</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  { <span class="stringliteral">"default"</span>, <a class="code" href="remmina__main_8c.html#a05dbb6ce820f3a137949b919d0efa6a1">remmina_main_on_action_application_default</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  { <span class="stringliteral">"mpchange"</span>, <a class="code" href="remmina__main_8c.html#abf51d42fa2c5ce84164b5514b4634229">remmina_main_on_action_application_mpchange</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  { <span class="stringliteral">"plugins"</span>, <a class="code" href="remmina__main_8c.html#adf59ad5b0a0ef68e58bbea3701929efc">remmina_main_on_action_application_plugins</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  { <span class="stringliteral">"preferences"</span>, <a class="code" href="remmina__main_8c.html#a6ed9f6a588a2d9e3a6cf6884c8d07f92">remmina_main_on_action_application_preferences</a>, <span class="stringliteral">"i"</span>, NULL, NULL },</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  { <span class="stringliteral">"dark"</span>, <a class="code" href="remmina__main_8c.html#a91f22c2834ac7f38d201d8d678f8c57b">remmina_main_on_action_application_dark_theme</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  { <span class="stringliteral">"debug"</span>, <a class="code" href="remmina__main_8c.html#a5db4436cc72b9d5ea3e498f8519efecc">remmina_main_on_action_help_debug</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  { <span class="stringliteral">"community"</span>, <a class="code" href="remmina__main_8c.html#aac3aa116a8d8b527f1aa61b7395b4b32">remmina_main_on_action_help_community</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  { <span class="stringliteral">"donations"</span>, <a class="code" href="remmina__main_8c.html#a2704d643ee15702a84a1c76219dd5277">remmina_main_on_action_help_donations</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  { <span class="stringliteral">"homepage"</span>, <a class="code" href="remmina__main_8c.html#a7049d977154921f651cc1538f59c5b7a">remmina_main_on_action_help_homepage</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  { <span class="stringliteral">"wiki"</span>, <a class="code" href="remmina__main_8c.html#a0c32fe66988056b353220128611b9116">remmina_main_on_action_help_wiki</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  { <span class="stringliteral">"quit"</span>, <a class="code" href="remmina__main_8c.html#a5445e5568a6fc04d08b620829a59334a">remmina_main_on_action_application_quit</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> };</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#af146cc1f982c98a9c8a5ac43cc1508f3"> 109</a></span> <span class="keyword">static</span> GActionEntry <a class="code" href="remmina__main_8c.html#af146cc1f982c98a9c8a5ac43cc1508f3">main_actions</a>[] = {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  { <span class="stringliteral">"connect"</span>, <a class="code" href="remmina__main_8c.html#a6b30ed832369f3a7153aa63f98873c9d">remmina_main_on_action_connection_connect</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  { <span class="stringliteral">"copy"</span>, <a class="code" href="remmina__main_8c.html#a44eb44c6391f53a19c6f1fdf9a39a8c1">remmina_main_on_action_connection_copy</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  { <span class="stringliteral">"delete"</span>, <a class="code" href="remmina__main_8c.html#a10e574723222f5df9db456977e62a093">remmina_main_on_action_connection_delete</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  { <span class="stringliteral">"edit"</span>, <a class="code" href="remmina__main_8c.html#adfbfc580d25b58d09770a7d33ffe03cc">remmina_main_on_action_connection_edit</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  { <span class="stringliteral">"exttools"</span>, <a class="code" href="remmina__main_8c.html#abcf8bd8ca57b389264ff9739a61efdc1">remmina_main_on_action_connection_external_tools</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  { <span class="stringliteral">"new"</span>, <a class="code" href="remmina__main_8c.html#a52cc21537ff003b9d0fbdb9040c811af">remmina_main_on_action_connection_new</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  { <span class="stringliteral">"export"</span>, <a class="code" href="remmina__main_8c.html#ab203476099a5ad6e889f91c8e05d577d">remmina_main_on_action_tools_export</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  { <span class="stringliteral">"import"</span>, <a class="code" href="remmina__main_8c.html#a4b4f0bbdb9e487d6c3809e8a57dc1d1c">remmina_main_on_action_tools_import</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  { <span class="stringliteral">"expand"</span>, <a class="code" href="remmina__main_8c.html#ab98d51c96a87fddaa2d5d6d4614bafa8">remmina_main_on_action_expand</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  { <span class="stringliteral">"collapse"</span>, <a class="code" href="remmina__main_8c.html#a0edcc1d7dc3adcbb7bb36aa0f62dec3a">remmina_main_on_action_collapse</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  { <span class="stringliteral">"search"</span>, <a class="code" href="remmina__main_8c.html#a9896df7a92402b5a61e58420235c515a">remmina_main_on_action_search_toggle</a>, NULL, NULL, NULL },</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a8ccd8303ada6e26880504fc58812fbda"> 123</a></span> <span class="keyword">static</span> GtkTargetEntry <a class="code" href="remmina__main_8c.html#a8ccd8303ada6e26880504fc58812fbda">remmina_drop_types</a>[] =</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  { <span class="stringliteral">"text/uri-list"</span>, 0, 1 }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c"> 128</a></span> <span class="keyword">static</span> <span class="keywordtype">char</span> *<a class="code" href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c">quick_connect_plugin_list</a>[] =</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="stringliteral">"RDP"</span>, <span class="stringliteral">"VNC"</span>, <span class="stringliteral">"SSH"</span>, <span class="stringliteral">"NX"</span>, <span class="stringliteral">"SPICE"</span>, <span class="stringliteral">"X2GO"</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> };</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ac448c53d7a2066763d2b747d269f60ee"> 136</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ac448c53d7a2066763d2b747d269f60ee">remmina_main_save_size</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> ((gdk_window_get_state(gtk_widget_get_window(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>))) & GDK_WINDOW_STATE_MAXIMIZED) == 0) {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  gtk_window_get_size(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, &<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a6318ff8e2f73d36fb8b35cbed503c222">main_width</a>, &<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aeb86dc8005c98ce2eab57bd900467875">main_height</a>);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a8edfd2a9a9a06b1fd876fbe8742b9ff6">main_maximize</a> = FALSE;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a8edfd2a9a9a06b1fd876fbe8742b9ff6">main_maximize</a> = TRUE;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a51880fc109db6457a5d0fc543c2deaf2"> 147</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a51880fc109db6457a5d0fc543c2deaf2">remmina_main_save_expanded_group_func</a>(GtkTreeView *tree_view, GtkTreePath *path, gpointer user_data)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  GtkTreeIter iter;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  gchar *group;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  gtk_tree_model_get_iter(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter, path);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  gtk_tree_model_get(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, &group, -1);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (group) {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="remmina__string__array_8c.html#a2aaacca7db4b86f836486cfb559398f0">remmina_string_array_add</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>, group);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  g_free(group);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ad8744dc59ba8072ffdf557b6c94e9f40"> 161</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ad8744dc59ba8072ffdf557b6c94e9f40">remmina_main_save_expanded_group</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">if</span> (GTK_IS_TREE_STORE(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a>)) {</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>)</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <a class="code" href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a> = <a class="code" href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a>();</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  gtk_tree_view_map_expanded_rows(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>,</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  (GtkTreeViewMappingFunc)<a class="code" href="remmina__main_8c.html#a51880fc109db6457a5d0fc543c2deaf2">remmina_main_save_expanded_group_func</a>, NULL);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a95cedb0d631aacbd1b4a5ee1e10a40a5"> 177</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a009f32092bd1d8dcd8e783d25416f3df">remmina_main_save_before_destroy</a>()</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">if</span> (!remminamain || !remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>)</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <a class="code" href="remmina__main_8c.html#ac448c53d7a2066763d2b747d269f60ee">remmina_main_save_size</a>();</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="remmina__main_8c.html#ad8744dc59ba8072ffdf557b6c94e9f40">remmina_main_save_expanded_group</a>();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  g_free(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aa8d4c923cb9ca1be451436d1790e8ee5">expanded_group</a>);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aa8d4c923cb9ca1be451436d1790e8ee5">expanded_group</a> = <a class="code" href="remmina__string__array_8c.html#a96f7bec7ce32de6cf5deadcd5aec51ec">remmina_string_array_to_string</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a77d974da2ddd1ea7c87f8b9bb1eedda8"> 190</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a95532ac6d110eeeb2e41d4b2a329797c">remmina_main_destroy</a>()</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">if</span> (remminamain) {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  gtk_widget_destroy(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>));</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  g_object_unref(remminamain-><a class="code" href="struct___remmina_main.html#ab7c6aebff1b06ef97c36bfa9d360b0c1">builder</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="remmina__string__array_8c.html#a8ab78913d299df665a408a8a5ec51bbe">remmina_string_array_free</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a> = NULL;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a>)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  g_object_unref(G_OBJECT(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a>));</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  g_object_unref(G_OBJECT(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#ae1e1d579bdb2517bd0f86408b9d5f97c">file_model_filter</a>));</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  g_free(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  g_free(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  g_free(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  g_free(remminamain);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  remminamain = NULL;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a33ef5745d8b934ef52379c277d3a1ab2"> 215</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a33ef5745d8b934ef52379c277d3a1ab2">remmina_main_dexit</a>(gpointer data)</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <a class="code" href="remmina__exec_8c.html#aaa67e07e2426828d7e7b9b30d2038d31">remmina_application_condexit</a>(<a class="code" href="remmina__exec_8h.html#ae9dfd6986f18cb3d846a4933ac792fd5ae79d14a54e119795478a6e390d7d3b40">REMMINA_CONDEXIT_ONMAINWINDELETE</a>);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a40493bb60c169e53e2e08a0d0a808302"> 222</a></span> gboolean <a class="code" href="remmina__main_8c.html#a40493bb60c169e53e2e08a0d0a808302">remmina_main_on_delete_event</a>(GtkWidget *widget, GdkEvent *event, gpointer user_data)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> {</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="remmina__main_8c.html#a009f32092bd1d8dcd8e783d25416f3df">remmina_main_save_before_destroy</a>();</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  g_idle_add(<a class="code" href="remmina__main_8c.html#a33ef5745d8b934ef52379c277d3a1ab2">remmina_main_dexit</a>, NULL);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> }</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a829d3ad1468d780380ae1ad693532e82"> 232</a></span> gboolean <a class="code" href="remmina__main_8c.html#a829d3ad1468d780380ae1ad693532e82">remmina_main_idle_destroy</a>(gpointer data)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">if</span> (remminamain)</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <a class="code" href="remmina__main_8c.html#a95532ac6d110eeeb2e41d4b2a329797c">remmina_main_destroy</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a4d2d08c3fed3f72ea7f4c0600fec7ed5"> 245</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aeb74f36e5fd58ceab9f13a184bfb2029">remmina_main_on_destroy_event</a>()</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (remminamain) {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="comment">/* Invalidate remminamain->window to avoid multiple destructions */</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a> = NULL;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">/* Destroy remminamain struct, later. We can't destroy</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment"> * important objects like the builder now */</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  g_idle_add(<a class="code" href="remmina__main_8c.html#a829d3ad1468d780380ae1ad693532e82">remmina_main_idle_destroy</a>, NULL);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a9e60326026d7de56882bc83c0084fd12"> 258</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a9e60326026d7de56882bc83c0084fd12">remmina_main_clear_selection_data</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  g_free(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  g_free(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a> = NULL;</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a> = NULL;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="preprocessor">#ifdef SNAP_BUILD</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ab08aae433b625c3a84330630fe2bd2d5"> 269</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ab08aae433b625c3a84330630fe2bd2d5">remmina_main_show_snap_welcome</a>()</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  GtkBuilder *dlgbuilder = NULL;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  GtkWidget *dlg;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  GtkWindow *parent;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordtype">int</span> result;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">static</span> gboolean shown_once = FALSE;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  gboolean need_snap_interface_connections = FALSE;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  GtkWidget *dsa;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *<a class="code" href="remmina__plugin__manager_8c.html#a5e79d6abd0b12c1ed2bb33988e41857e">remmina_secret_plugin</a>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (shown_once)</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  shown_once = TRUE;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  g_print(<span class="stringliteral">"Remmina is compiled as a SNAP package.\n"</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  remmina_secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> (remmina_secret_plugin == NULL) {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  g_print(<span class="stringliteral">" but we can’t find the secret plugin inside the SNAP.\n"</span>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  need_snap_interface_connections = TRUE;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">if</span> (!remmina_secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(remmina_secret_plugin)) {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  g_print(<span class="stringliteral">" but we can’t access a secret service. Secret service or SNAP interface connection is missing.\n"</span>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  need_snap_interface_connections = TRUE;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keywordflow">if</span> (need_snap_interface_connections && !<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a18872e092d22f5d3accb66d6a22845d7">prevent_snap_welcome_message</a>) {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  dlgbuilder = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">"/org/remmina/Remmina/src/../data/ui/remmina_snap_info_dialog.glade"</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  dsa = GTK_WIDGET(gtk_builder_get_object(dlgbuilder, <span class="stringliteral">"dontshowagain"</span>));</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">if</span> (dlgbuilder) {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  parent = <a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  dlg = GTK_WIDGET(gtk_builder_get_object(dlgbuilder, <span class="stringliteral">"SnapInfoDlg"</span>));</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">if</span> (parent)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  gtk_window_set_transient_for(GTK_WINDOW(dlg), parent);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  gtk_builder_connect_signals(dlgbuilder, NULL);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  result = gtk_dialog_run(GTK_DIALOG(dlg));</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (result == 1) {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a18872e092d22f5d3accb66d6a22845d7">prevent_snap_welcome_message</a> = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dsa));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  gtk_widget_destroy(dlg);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  g_object_unref(dlgbuilder);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a3c5043279b5d98d4d08635d33402ea66"> 319</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a3c5043279b5d98d4d08635d33402ea66">remmina_main_selection_func</a>(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path,</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  gboolean path_currently_selected, gpointer user_data)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  guint context_id;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  GtkTreeIter iter;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  gchar buf[1000];</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">if</span> (path_currently_selected)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span> (!gtk_tree_model_get_iter(model, &iter, path))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="remmina__main_8c.html#a9e60326026d7de56882bc83c0084fd12">remmina_main_clear_selection_data</a>();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  gtk_tree_model_get(model, &iter,</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>, &remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>,</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, &remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>,</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  -1);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  context_id = gtk_statusbar_get_context_id(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, <span class="stringliteral">"status"</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  gtk_statusbar_pop(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, context_id);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>) {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  g_snprintf(buf, <span class="keyword">sizeof</span>(buf), <span class="stringliteral">"%s (%s)"</span>, remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>, remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  gtk_statusbar_push(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, context_id, buf);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  gtk_statusbar_push(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, context_id, remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div><div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a71f485dba1b11bf8cba129920767b5e6"> 352</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a71f485dba1b11bf8cba129920767b5e6">remmina_main_load_file_list_callback</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gpointer user_data)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  GtkTreeIter iter;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  GtkListStore *store;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  store = GTK_LIST_STORE(user_data);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  gchar *datetime;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> </div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  datetime = <a class="code" href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a>(remminafile);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  gtk_list_store_append(store, &iter);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  gtk_list_store_set(store, &iter,</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445">PROTOCOL_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a>(remminafile),</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>),</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3">NOTES_COLUMN</a>, g_uri_unescape_string(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"notes_text"</span>), NULL),</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>),</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c129f382d9456db6f671e1e6e99d32f">SERVER_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>),</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ad68c7d7d2f1cfe0321e87c4a833a0756">PLUGIN_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>),</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a>, datetime,</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, <a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile),</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454">LABELS_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"labels"</span>),</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  -1);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  g_free(datetime);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a2a6ba822ef89ef8ad9f19340c2c8b7f5"> 377</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a2a6ba822ef89ef8ad9f19340c2c8b7f5">remmina_main_load_file_tree_traverse</a>(GNode *<a class="code" href="remmina__ssh_8c.html#a85d5bd836f83ef1dbbcf4657f32e0792">node</a>, GtkTreeStore *store, GtkTreeIter *parent)</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  GtkTreeIter *iter;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *data;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  GNode *child;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  iter = NULL;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordflow">if</span> (node->data) {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  data = (<a class="code" href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a> *)node->data;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  iter = g_new0(GtkTreeIter, 1);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  gtk_tree_store_append(store, iter, parent);</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  gtk_tree_store_set(store, iter,</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445">PROTOCOL_COLUMN</a>, <span class="stringliteral">"folder-symbolic"</span>,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>, data->name,</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, data->group,</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a>, data->datetime,</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, NULL,</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454">LABELS_COLUMN</a>, data->labels,</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  -1);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">for</span> (child = g_node_first_child(node); child; child = g_node_next_sibling(child))</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="remmina__main_8c.html#a2a6ba822ef89ef8ad9f19340c2c8b7f5">remmina_main_load_file_tree_traverse</a>(child, store, iter);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  g_free(iter);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aa46e6b815c241d32a476a29053dbf296"> 404</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aa46e6b815c241d32a476a29053dbf296">remmina_main_load_file_tree_group</a>(GtkTreeStore *store)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  GNode *root;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  root = <a class="code" href="remmina__file__manager_8c.html#a6593a3f297f420f012405fa582819857">remmina_file_manager_get_group_tree</a>();</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="remmina__main_8c.html#a2a6ba822ef89ef8ad9f19340c2c8b7f5">remmina_main_load_file_tree_traverse</a>(root, store, NULL);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <a class="code" href="remmina__file__manager_8c.html#a06196f19abc15526514a5aa59a568798">remmina_file_manager_free_group_tree</a>(root);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a74cb130b886c2b905f651e777644a08c"> 414</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a74cb130b886c2b905f651e777644a08c">remmina_main_expand_group_traverse</a>(GtkTreeIter *iter)</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  GtkTreeModel *tree;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  gboolean ret;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  gchar *group, *filename;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  GtkTreeIter child;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  GtkTreePath *path;</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  tree = remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  ret = TRUE;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">while</span> (ret) {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  gtk_tree_model_get(tree, iter, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, &group, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, &filename, -1);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">if</span> (filename == NULL) {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__string__array_8c.html#ab93a69850cfb4117c223a3f145ced986">remmina_string_array_find</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a>, group) >= 0) {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  path = gtk_tree_model_get_path(tree, iter);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  gtk_tree_view_expand_row(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, path, FALSE);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  gtk_tree_path_free(path);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  }</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">if</span> (gtk_tree_model_iter_children(tree, &child, iter))</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <a class="code" href="remmina__main_8c.html#a74cb130b886c2b905f651e777644a08c">remmina_main_expand_group_traverse</a>(&child);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  g_free(group);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  g_free(filename);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  ret = gtk_tree_model_iter_next(tree, iter);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> }</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> </div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a4a4733c243f20c3ffc27105003f5e30e"> 443</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a4a4733c243f20c3ffc27105003f5e30e">remmina_main_expand_group</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  GtkTreeIter iter;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">if</span> (gtk_tree_model_get_iter_first(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter))</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="remmina__main_8c.html#a74cb130b886c2b905f651e777644a08c">remmina_main_expand_group_traverse</a>(&iter);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> </div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a847424fdb97ffe35d060409d4d738497"> 452</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a847424fdb97ffe35d060409d4d738497">remmina_main_load_file_tree_find</a>(GtkTreeModel *tree, GtkTreeIter *iter, <span class="keyword">const</span> gchar *match_group)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  gboolean ret, match;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  gchar *group, *filename;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  GtkTreeIter child;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  match = FALSE;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  ret = TRUE;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">while</span> (ret) {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  gtk_tree_model_get(tree, iter, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, &group, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, &filename, -1);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  match = (filename == NULL && g_strcmp0(group, match_group) == 0);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  g_free(group);</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  g_free(filename);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">if</span> (match)</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">if</span> (gtk_tree_model_iter_children(tree, &child, iter)) {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  match = <a class="code" href="remmina__main_8c.html#a847424fdb97ffe35d060409d4d738497">remmina_main_load_file_tree_find</a>(tree, &child, match_group);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (match) {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  memcpy(iter, &child, <span class="keyword">sizeof</span>(GtkTreeIter));</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  ret = gtk_tree_model_iter_next(tree, iter);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">return</span> match;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ae32574ebe06b1a24f135af9379e663b4"> 480</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ae32574ebe06b1a24f135af9379e663b4">remmina_main_load_file_tree_callback</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gpointer user_data)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  GtkTreeIter iter, child;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  GtkTreeStore *store;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  gboolean found;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  gchar *datetime = NULL;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  store = GTK_TREE_STORE(user_data);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  found = FALSE;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">if</span> (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter))</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  found = <a class="code" href="remmina__main_8c.html#a847424fdb97ffe35d060409d4d738497">remmina_main_load_file_tree_find</a>(GTK_TREE_MODEL(store), &iter,</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>));</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  datetime = <a class="code" href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a>(remminafile);</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="comment">//REMMINA_DEBUG("The date is %s", datetime);</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  gtk_tree_store_append(store, &child, (found ? &iter : NULL));</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  gtk_tree_store_set(store, &child,</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445">PROTOCOL_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a>(remminafile),</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>),</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3">NOTES_COLUMN</a>, g_uri_unescape_string(<a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"notes_text"</span>), NULL),</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>),</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c129f382d9456db6f671e1e6e99d32f">SERVER_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>),</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ad68c7d7d2f1cfe0321e87c4a833a0756">PLUGIN_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>),</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a>, datetime,</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, <a class="code" href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a>(remminafile),</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454">LABELS_COLUMN</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"labels"</span>),</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  -1);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  g_free(datetime);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> }</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div><div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a71fbe206a9c2abb8f348ee598d7751b7"> 512</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a71fbe206a9c2abb8f348ee598d7751b7">remmina_main_file_model_on_sort</a>(GtkTreeSortable *sortable, gpointer user_data)</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> {</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  gint columnid;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  GtkSortType order;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  gtk_tree_sortable_get_sort_column_id(sortable, &columnid, &order);</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac13f1310a2625b29defdf5b0ba8fd2d0">main_sort_column_id</a> = columnid;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a4504684f0e67bb50157fd6862182e2c4">main_sort_order</a> = order;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ab0d22f0e3571eb80886acb0c68005800"> 524</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#ab0d22f0e3571eb80886acb0c68005800">remmina_main_filter_visible_func</a>(GtkTreeModel *model, GtkTreeIter *iter, gpointer user_data)</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> {</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  gchar *text;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  gchar *protocol, *name, *labels, *group, *server, *plugin, *date, *s;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  gboolean result = TRUE;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  text = g_ascii_strdown(gtk_entry_get_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>), -1);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">if</span> (text && text[0]) {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  gtk_tree_model_get(model, iter,</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a2b637b91fededa6eb7f4be69da080445">PROTOCOL_COLUMN</a>, &protocol,</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1f8f29e04fd120da5a66491ef0a4ff6c">NAME_COLUMN</a>, &name,</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a1704de86134c42b13d2e5fd7cf7c903b">GROUP_COLUMN</a>, &group,</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c129f382d9456db6f671e1e6e99d32f">SERVER_COLUMN</a>, &server,</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388ad68c7d7d2f1cfe0321e87c4a833a0756">PLUGIN_COLUMN</a>, &plugin,</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a>, &date,</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a4d053f07c7bfa18ee1db38382a64c454">LABELS_COLUMN</a>, &labels,</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  -1);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span> (g_strcmp0(protocol, <span class="stringliteral">"folder-symbolic"</span>) != 0) {</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  s = g_ascii_strdown(name ? name : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  g_free(name);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  name = s;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  s = g_ascii_strdown(group ? group : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  g_free(group);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  group = s;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  s = g_ascii_strdown(server ? server : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  g_free(server);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  server = s;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  s = g_ascii_strdown(plugin ? plugin : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  g_free(plugin);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  plugin = s;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  s = g_ascii_strdown(date ? date : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  g_free(date);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  date = s;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  result = (strstr(name, text) || strstr(group, text) || strstr(server, text) || strstr(plugin, text) || strstr(date, text));</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span> </div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="comment">// Filter by labels</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  s = g_ascii_strdown(labels ? labels : <span class="stringliteral">""</span>, -1);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  g_free(labels);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  labels = s;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">if</span> (strlen(labels) > 0) {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  gboolean labels_result = TRUE;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  gchar **labels_array = g_strsplit(labels, <span class="stringliteral">","</span>, -1);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  gchar **text_array = g_strsplit(text, <span class="stringliteral">","</span>, -1);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> t = 0; (NULL != text_array[t]); t++) {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">if</span> (0 == strlen(text_array[t])) {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  }</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  gboolean text_result = FALSE;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> l = 0; (NULL != labels_array[l]); l++) {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">if</span> (0 == strlen(labels_array[l])) {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  }</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  text_result = (text_result || strstr(labels_array[l], text_array[t]));</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span> (text_result) {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  }</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  labels_result = (labels_result && text_result);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">if</span> (!labels_result) {</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  result = (result || labels_result);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  g_strfreev(labels_array);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  g_strfreev(text_array);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  }</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  g_free(protocol);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  g_free(name);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  g_free(labels);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  g_free(group);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  g_free(server);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  g_free(plugin);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  g_free(date);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  g_free(text);</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span> }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aa20963aed43242994c88d5a97a546355"> 615</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aa20963aed43242994c88d5a97a546355">remmina_main_select_file</a>(<span class="keyword">const</span> gchar *filename)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> {</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  GtkTreeIter iter;</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  GtkTreePath *path;</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  gchar *item_filename;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  gboolean cmp;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">if</span> (!gtk_tree_model_get_iter_first(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter))</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span> </div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">while</span> (TRUE) {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  gtk_tree_model_get(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter, <a class="code" href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a8c5d264253ed2fc8f96ffcee508db93d">FILENAME_COLUMN</a>, &item_filename, -1);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  cmp = g_strcmp0(item_filename, filename);</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  g_free(item_filename);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">if</span> (cmp == 0) {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  gtk_tree_selection_select_iter(gtk_tree_view_get_selection(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>),</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  &iter);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  path = gtk_tree_model_get_path(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter);</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  gtk_tree_view_scroll_to_cell(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, path, NULL, TRUE, 0.5, 0.0);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  gtk_tree_path_free(path);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (!gtk_tree_model_iter_next(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>, &iter))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7"> 643</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>()</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  gint items_count;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  gchar buf[200];</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  guint context_id;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  gint view_file_mode;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  gboolean always_show_notes;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordtype">char</span> *save_selected_filename;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  GtkTreeModel *newmodel;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keyword">const</span> gchar *neticon;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">const</span> gchar *connection_tooltip;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  save_selected_filename = g_strdup(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <a class="code" href="remmina__main_8c.html#ad8744dc59ba8072ffdf557b6c94e9f40">remmina_main_save_expanded_group</a>();</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  view_file_mode = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a>;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a0307278dd7770ab490f4687f2eb00e76">override_view_file_mode_to_list</a>)</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  view_file_mode = <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">switch</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a>) {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df">REMMINA_VIEW_FILE_TREE</a>:</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  gtk_toggle_button_set_active(remminamain-><a class="code" href="struct___remmina_main.html#ae3c2c0b9855bb44b5b9a27a3178d32e7">view_toggle_button</a>, FALSE);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>:</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  gtk_toggle_button_set_active(remminamain-><a class="code" href="struct___remmina_main.html#ae3c2c0b9855bb44b5b9a27a3178d32e7">view_toggle_button</a>, TRUE);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  }</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">switch</span> (view_file_mode) {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df">REMMINA_VIEW_FILE_TREE</a>:</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="comment">/* Create new GtkTreeStore model */</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  newmodel = GTK_TREE_MODEL(gtk_tree_store_new(9, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING));</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="comment">/* Hide the Group column in the tree view mode */</span></div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  gtk_tree_view_column_set_visible(remminamain-><a class="code" href="struct___remmina_main.html#a56ac6ffe61c0d3663ebc6b26e65a8cbc">column_files_list_group</a>, FALSE);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="comment">/* Load groups first */</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <a class="code" href="remmina__main_8c.html#aa46e6b815c241d32a476a29053dbf296">remmina_main_load_file_tree_group</a>(GTK_TREE_STORE(newmodel));</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="comment">/* Load files list */</span></div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  items_count = <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>((GFunc)<a class="code" href="remmina__main_8c.html#ae32574ebe06b1a24f135af9379e663b4">remmina_main_load_file_tree_callback</a>, (gpointer)newmodel);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>:</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="comment">/* Create new GtkListStore model */</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  newmodel = GTK_TREE_MODEL(gtk_list_store_new(9, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING));</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="comment">/* Show the Group column in the list view mode */</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  gtk_tree_view_column_set_visible(remminamain-><a class="code" href="struct___remmina_main.html#a56ac6ffe61c0d3663ebc6b26e65a8cbc">column_files_list_group</a>, TRUE);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="comment">/* Load files list */</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  items_count = <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>((GFunc)<a class="code" href="remmina__main_8c.html#a71f485dba1b11bf8cba129920767b5e6">remmina_main_load_file_list_callback</a>, (gpointer)newmodel);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="comment">/* Set note column visibility*/</span></div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  always_show_notes = <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a320861799b86dc076d5f87e3a216eb95">always_show_notes</a>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordflow">if</span> (!always_show_notes){</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  gtk_tree_view_column_set_visible(remminamain-><a class="code" href="struct___remmina_main.html#ab743fa626843d8fbb669fbd01819aea9">column_files_list_notes</a>, FALSE);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">/* Unset old model */</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  gtk_tree_view_set_model(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, NULL);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="comment">/* Destroy the old model and save the new one */</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a> = newmodel;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="comment">/* Create a sorted filtered model based on newmodel and apply it to the TreeView */</span></div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#ae1e1d579bdb2517bd0f86408b9d5f97c">file_model_filter</a> = gtk_tree_model_filter_new(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a>, NULL);</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#ae1e1d579bdb2517bd0f86408b9d5f97c">file_model_filter</a>),</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  (GtkTreeModelFilterVisibleFunc)<a class="code" href="remmina__main_8c.html#ab0d22f0e3571eb80886acb0c68005800">remmina_main_filter_visible_func</a>, NULL, NULL);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a> = gtk_tree_model_sort_new_with_model(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#ae1e1d579bdb2517bd0f86408b9d5f97c">file_model_filter</a>);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>),</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac13f1310a2625b29defdf5b0ba8fd2d0">main_sort_column_id</a>,</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a4504684f0e67bb50157fd6862182e2c4">main_sort_order</a>);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  gtk_tree_view_set_model(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  g_signal_connect(G_OBJECT(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a87a88c763f806d76fdee5a233c3ad7cd">file_model_sort</a>), <span class="stringliteral">"sort-column-changed"</span>,</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  G_CALLBACK(<a class="code" href="remmina__main_8c.html#a71fbe206a9c2abb8f348ee598d7751b7">remmina_main_file_model_on_sort</a>), NULL);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <a class="code" href="remmina__main_8c.html#a4a4733c243f20c3ffc27105003f5e30e">remmina_main_expand_group</a>();</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="comment">/* Select the file previously selected */</span></div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">if</span> (save_selected_filename) {</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="remmina__main_8c.html#aa20963aed43242994c88d5a97a546355">remmina_main_select_file</a>(save_selected_filename);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  g_free(save_selected_filename);</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  gtk_tree_view_column_set_widget(remminamain-><a class="code" href="struct___remmina_main.html#a1ffeff8198ae0dc7c2461001118fcc5a">column_files_list_date</a>, NULL);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  GtkWidget *label = gtk_tree_view_column_get_button(remminamain-><a class="code" href="struct___remmina_main.html#a1ffeff8198ae0dc7c2461001118fcc5a">column_files_list_date</a>);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  gtk_widget_set_tooltip_text(GTK_WIDGET(label),</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  _(<span class="stringliteral">"The latest successful connection attempt, or a pre-computed date"</span>));</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">/* Show in the status bar the total number of connections found */</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  g_snprintf(buf, <span class="keyword">sizeof</span>(buf), ngettext(<span class="stringliteral">"Total %i item."</span>, <span class="stringliteral">"Total %i items."</span>, items_count), items_count);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  context_id = gtk_statusbar_get_context_id(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, <span class="stringliteral">"status"</span>);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  gtk_statusbar_pop(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, context_id);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  gtk_statusbar_push(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>, context_id, buf);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> </div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  <a class="code" href="remmina__monitor_8c.html#acf79b91eb05694ec967d726bd0f85e50">remmina_network_monitor_status</a> (remminamain-><a class="code" href="struct___remmina_main.html#a0e6602776373cf6a198d249df6e87150">monitor</a>);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a0e6602776373cf6a198d249df6e87150">monitor</a>-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a>){</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  neticon = g_strdup(<span class="stringliteral">"network-transmit-receive-symbolic"</span>);</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  connection_tooltip = g_strdup(_(<span class="stringliteral">"Network status: fully online"</span>));</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  neticon = g_strdup(<span class="stringliteral">"network-offline-symbolic"</span>);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  connection_tooltip = g_strdup(_(<span class="stringliteral">"Network status: offline"</span>));</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (GTK_IS_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a>))</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  gtk_widget_destroy(remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a>);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  GIcon *icon = g_themed_icon_new (neticon);</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a> = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_BUTTON);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  gtk_widget_set_tooltip_text (remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a>, connection_tooltip);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  g_object_unref (icon);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span> </div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  gtk_box_pack_start (GTK_BOX(remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a>), remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a>, FALSE, FALSE, 0);</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  gtk_widget_show (remminamain-><a class="code" href="struct___remmina_main.html#a0995d06fd3cad6098f0ecfaca9ed616f">network_icon</a>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span> </div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span> }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a627eb26ab02f0093365ed6b10dab0320"> 759</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a627eb26ab02f0093365ed6b10dab0320">remmina_main_load_files_cb</a>(GtkEntry *entry, <span class="keywordtype">char</span> *<span class="keywordtype">string</span>, gpointer user_data)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> {</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a6b30ed832369f3a7153aa63f98873c9d"> 765</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a6b30ed832369f3a7153aa63f98873c9d">remmina_main_on_action_connection_connect</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span> </div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> </div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (remminafile == NULL)</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  && <a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_connect"</span>)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">"profile-lock"</span>, FALSE) == 1</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a>(remminafile);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="rcw_8c.html#aa37f2a9c56df0ce1a0dbc32f8989e4b5">rcw_open_from_filename</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span> }</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div><div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#abcf8bd8ca57b389264ff9739a61efdc1"> 793</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#abcf8bd8ca57b389264ff9739a61efdc1">remmina_main_on_action_connection_external_tools</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> {</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <a class="code" href="remmina__external__tools_8c.html#abe70273f7d1cbab092c6f6017695c56d">remmina_external_tools_from_filename</a>(remminamain, remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span> </div><div class="line"><a name="l00802"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a6a466d0b07944e619bd9b0e473c8a5bd"> 802</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a6a466d0b07944e619bd9b0e473c8a5bd">remmina_main_file_editor_destroy</a>(GtkWidget *widget, gpointer user_data)</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span> {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">if</span> (!remminamain)</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div><div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#abf51d42fa2c5ce84164b5514b4634229"> 811</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#abf51d42fa2c5ce84164b5514b4634229">remmina_main_on_action_application_mpchange</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> {</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keyword">const</span> gchar *username;</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keyword">const</span> gchar *domain;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="keyword">const</span> gchar *group;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keyword">const</span> gchar *gatewayusername;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keyword">const</span> gchar *gatewaydomain;</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> </div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  username = domain = group = gatewayusername = gatewaydomain = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  remminafile = NULL;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  && <a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_edit"</span>)</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>) {</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">if</span> (remminafile != NULL) {</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"username"</span>);</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  domain = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"domain"</span>);</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  gatewayusername = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"gateway_username"</span>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  gatewaydomain = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"gateway_domain"</span>);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  }</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <a class="code" href="remmina__mpchange_8c.html#aa5a382490ca5e92bc4b124f66d83c4ff">remmina_mpchange_schedule</a>(TRUE, group, domain, username, <span class="stringliteral">""</span>, gatewayusername, gatewaydomain, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span> </div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">if</span> (remminafile != NULL)</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> </div><div class="line"><a name="l00848"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a52cc21537ff003b9d0fbdb9040c811af"> 848</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a52cc21537ff003b9d0fbdb9040c811af">remmina_main_on_action_connection_new</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span> {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE)</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  GtkWidget *widget;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  && <a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_edit"</span>)</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  widget = <a class="code" href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a>();</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  g_signal_connect(G_OBJECT(widget), <span class="stringliteral">"destroy"</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#a6a466d0b07944e619bd9b0e473c8a5bd">remmina_main_file_editor_destroy</a>), remminamain);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  gtk_window_set_transient_for(GTK_WINDOW(widget), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  gtk_widget_show(widget);</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span> </div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#af129aea3f5f3ec56b061187a81d43e4c"> 867</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#af129aea3f5f3ec56b061187a81d43e4c">remmina_main_search_key_event</a>(GtkWidget *search_entry, GdkEventKey *event, gpointer user_data)</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> {</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">if</span> (event->keyval == GDK_KEY_Escape) {</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  gtk_entry_set_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"search_toggle"</span>)), FALSE);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> }</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span> </div><div class="line"><a name="l00878"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a4477897686d091d6f57e7f9401674a8c"> 878</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a4477897686d091d6f57e7f9401674a8c">remmina_main_tree_row_activated</a>(GtkTreeView *tree, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> {</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span> (gtk_tree_view_row_expanded(tree, path))</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  gtk_tree_view_collapse_row(tree, path);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  gtk_tree_view_expand_row(tree, path, FALSE);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> }</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div><div class="line"><a name="l00888"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ac1a3a51f6d7f6a2411f9b38de860d766"> 888</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ac1a3a51f6d7f6a2411f9b38de860d766">remmina_main_on_view_toggle</a>()</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span> {</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">if</span> (gtk_toggle_button_get_active(remminamain-><a class="code" href="struct___remmina_main.html#ae3c2c0b9855bb44b5b9a27a3178d32e7">view_toggle_button</a>)) {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> != <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>) {</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> = <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  gtk_entry_set_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> != <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df">REMMINA_VIEW_FILE_TREE</a>) {</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> = <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034a46530ebfd659963a54b7dae5702af1df">REMMINA_VIEW_FILE_TREE</a>;</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  gtk_entry_set_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, <span class="stringliteral">""</span>);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  }</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  }</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> }</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div><div class="line"><a name="l00907"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a44eb44c6391f53a19c6f1fdf9a39a8c1"> 907</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a44eb44c6391f53a19c6f1fdf9a39a8c1">remmina_main_on_action_connection_copy</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span> {</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  GtkWidget *widget;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> </div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">if</span> (((<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_edit"</span>)</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  && <a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>))</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  || <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">"profile-lock"</span>, FALSE))</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  remminafile = NULL;</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  }</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span> </div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  widget = <a class="code" href="remmina__file__editor_8c.html#aa5c50852f8569f075eec5d5db30c2ebf">remmina_file_editor_new_copy</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keywordflow">if</span> (widget) {</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  g_signal_connect(G_OBJECT(widget), <span class="stringliteral">"destroy"</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#a6a466d0b07944e619bd9b0e473c8a5bd">remmina_main_file_editor_destroy</a>), remminamain);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  gtk_window_set_transient_for(GTK_WINDOW(widget), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  gtk_widget_show(widget);</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  }</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="comment">/* Select the file previously selected */</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <a class="code" href="remmina__main_8c.html#aa20963aed43242994c88d5a97a546355">remmina_main_select_file</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> }</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div><div class="line"><a name="l00943"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#adfbfc580d25b58d09770a7d33ffe03cc"> 943</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#adfbfc580d25b58d09770a7d33ffe03cc">remmina_main_on_action_connection_edit</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span> {</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  GtkWidget *widget;</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span> </div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  && (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_edit"</span>)</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  || <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">"profile-lock"</span>, FALSE))</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> </div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  remminafile = NULL;</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  }</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span> </div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  widget = <a class="code" href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">if</span> (widget) {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  gtk_window_set_transient_for(GTK_WINDOW(widget), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  gtk_widget_show(widget);</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  }</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span> <span class="comment">/* Select the file previously selected */</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <a class="code" href="remmina__main_8c.html#aa20963aed43242994c88d5a97a546355">remmina_main_select_file</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> }</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span> </div><div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a10e574723222f5df9db456977e62a093"> 974</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a10e574723222f5df9db456977e62a093">remmina_main_on_action_connection_delete</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span> {</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  GtkWidget *dialog;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span> </div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span> </div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="keywordflow">if</span> (((<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"lock_edit"</span>)</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  && <a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>))</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  || <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a> (remminafile, <span class="stringliteral">"profile-lock"</span>, FALSE))</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  remminafile = NULL;</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  }</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span> </div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  dialog = gtk_message_dialog_new(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO,</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  _(<span class="stringliteral">"Are you sure you want to delete “%s”?"</span>), remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a606c7e6dc78219e8e5536519db723a4d">selected_name</a>);</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">if</span> (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) {</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  gchar *delfilename = g_strdup(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <a class="code" href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a>(delfilename);</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  g_free(delfilename), delfilename = NULL;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <a class="code" href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a>();</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  gtk_widget_destroy(dialog);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="remmina__main_8c.html#a9e60326026d7de56882bc83c0084fd12">remmina_main_clear_selection_data</a>();</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> }</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div><div class="line"><a name="l01008"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a1e8b7e8c0f7a47dc0409ae6eb18cfc6a"> 1008</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a1e8b7e8c0f7a47dc0409ae6eb18cfc6a">remmina_main_on_accel_application_preferences</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> {</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  GVariant *v = g_variant_new(<span class="stringliteral">"i"</span>, 0);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> </div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <a class="code" href="remmina__main_8c.html#a6ed9f6a588a2d9e3a6cf6884c8d07f92">remmina_main_on_action_application_preferences</a>(NULL, v, NULL);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> }</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div><div class="line"><a name="l01016"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a6ed9f6a588a2d9e3a6cf6884c8d07f92"> 1016</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a6ed9f6a588a2d9e3a6cf6884c8d07f92">remmina_main_on_action_application_preferences</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> {</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  GtkSettings *settings;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> </div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  REMMINA_DEBUG(<span class="stringliteral">"Opening the preferences"</span>);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  gint32 tab_num;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordflow">if</span> (param) {</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  REMMINA_DEBUG(<span class="stringliteral">"Parameter passed to preferences of type %s"</span>, g_variant_get_type_string(param));</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  tab_num = g_variant_get_int32(param);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  REMMINA_DEBUG(<span class="stringliteral">"We got a parameter for the preferences: %d"</span>, tab_num);</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  tab_num = 0;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  }</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span> </div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  && <a class="code" href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) == 0)</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  GtkWidget *widget = <a class="code" href="remmina__pref__dialog_8c.html#ab09f64d25a5a016281a56edca7e2d70a">remmina_pref_dialog_new</a>(tab_num, remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> </div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  gtk_widget_show_all(widget);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="comment">/* Switch to a dark theme if the user enabled it */</span></div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  settings = gtk_settings_get_default();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  g_object_set(settings, <span class="stringliteral">"gtk-application-prefer-dark-theme"</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a7c139ee405d50330b1d9bfb646c0258c">dark_theme</a>, NULL);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> }</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span> </div><div class="line"><a name="l01044"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a05dbb6ce820f3a137949b919d0efa6a1"> 1044</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a05dbb6ce820f3a137949b919d0efa6a1">remmina_main_on_action_application_default</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> {</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  g_autoptr(GError) error = NULL;</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  GDesktopAppInfo *desktop_info;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  GAppInfo *info = NULL;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  g_autofree gchar *<span class="keywordtype">id</span> = g_strconcat(REMMINA_APP_ID, <span class="stringliteral">".desktop"</span>, NULL);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="keywordtype">int</span> i;</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> </div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  desktop_info = g_desktop_app_info_new(<span class="keywordtype">id</span>);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="keywordflow">if</span> (!desktop_info)</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> </div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  info = G_APP_INFO(desktop_info);</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> </div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="keywordflow">for</span> (i = 0; <a class="code" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i]; i++) {</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="keywordflow">if</span> (!g_app_info_set_as_default_for_type(info, <a class="code" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i], &error))</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  g_warning(<span class="stringliteral">"Failed to set '%s' as the default application for secondary content type '%s': %s"</span>,</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  g_app_info_get_name(info), <a class="code" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i], error->message);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  g_debug(<span class="stringliteral">"Set '%s' as the default application for '%s'"</span>,</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  g_app_info_get_name(info),</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  <a class="code" href="remmina__main_8c.html#a8ebbcba2c07af0938b3c29e316747d12">supported_mime_types</a>[i]);</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> }</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> </div><div class="line"><a name="l01070"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a5445e5568a6fc04d08b620829a59334a"> 1070</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a5445e5568a6fc04d08b620829a59334a">remmina_main_on_action_application_quit</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> {</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  <span class="comment">// Called by quit signal in remmina_main.glade</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  g_debug(<span class="stringliteral">"Quit intercept"</span>);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <a class="code" href="remmina__exec_8c.html#aaa67e07e2426828d7e7b9b30d2038d31">remmina_application_condexit</a>(<a class="code" href="remmina__exec_8h.html#ae9dfd6986f18cb3d846a4933ac792fd5a94dfcc0fcf38aa8060ff843e40799284">REMMINA_CONDEXIT_ONQUIT</a>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div><div class="line"><a name="l01078"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a3d60de4c121cae0c82e60b13873073db"> 1078</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a3d60de4c121cae0c82e60b13873073db">remmina_main_on_date_column_sort_clicked</a>()</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> != <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>) {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">view_file_mode</a> = <a class="code" href="remmina__pref_8h.html#aac34dfe6c6b73b43a4656c9dce041034ae2bd62151481c5fa5823aa2d66fb67d7">REMMINA_VIEW_FILE_LIST</a>;</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  gtk_entry_set_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, <span class="stringliteral">""</span>);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  }</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span> }</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> </div><div class="line"><a name="l01088"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ac767825cb87a34531306cfb587216d20"> 1088</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ac767825cb87a34531306cfb587216d20">remmina_main_import_file_list</a>(GSList *files)</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> {</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  GtkWidget *dlg;</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  GSList *element;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  gchar *path;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <a class="code" href="struct___remmina_file_plugin.html">RemminaFilePlugin</a> *plugin;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  GString *err;</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile = NULL;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  gboolean imported;</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  err = g_string_new(NULL);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  imported = FALSE;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  <span class="keywordflow">for</span> (element = files; element; element = element->next) {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  path = (gchar *)element->data;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#a859348bddc9069f06195915692b65076">remmina_plugin_manager_get_import_file_handler</a>(path);</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  <span class="keywordflow">if</span> (plugin && (remminafile = plugin-><a class="code" href="struct___remmina_file_plugin.html#a597178a88c755ebe0614897b7aa279b1">import_func</a>(plugin, path)) != NULL && <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>)) {</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <a class="code" href="remmina__file_8c.html#ac952f8ddb715314f11cef1ccc513fb7e">remmina_file_generate_filename</a>(remminafile);</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  <a class="code" href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a>(remminafile);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  imported = TRUE;</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  g_string_append(err, path);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  g_string_append_c(err, <span class="charliteral">'\n'</span>);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  }</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  remminafile = NULL;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  g_free(path);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  g_slist_free(files);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <span class="keywordflow">if</span> (err->len > 0) {</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <span class="comment">// TRANSLATORS: The placeholder %s is an error message</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  dlg = gtk_message_dialog_new(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  _(<span class="stringliteral">"Unable to import:\n%s"</span>), err->str);</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  g_signal_connect(G_OBJECT(dlg), <span class="stringliteral">"response"</span>, G_CALLBACK(gtk_widget_destroy), NULL);</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  gtk_widget_show(dlg);</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  }</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  g_string_free(err, TRUE);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">if</span> (imported)</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span> }</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> </div><div class="line"><a name="l01131"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a85aa313453e0ecaa17bcce233973998d"> 1131</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a85aa313453e0ecaa17bcce233973998d">remmina_main_action_tools_import_on_response</a>(GtkDialog *dialog, gint response_id, gpointer user_data)</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span> {</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  GSList *files;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span> </div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keywordflow">if</span> (response_id == GTK_RESPONSE_ACCEPT) {</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  files = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(dialog));</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <a class="code" href="remmina__main_8c.html#ac767825cb87a34531306cfb587216d20">remmina_main_import_file_list</a>(files);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  }</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  gtk_widget_destroy(GTK_WIDGET(dialog));</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> }</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span> </div><div class="line"><a name="l01143"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a4b4f0bbdb9e487d6c3809e8a57dc1d1c"> 1143</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a4b4f0bbdb9e487d6c3809e8a57dc1d1c">remmina_main_on_action_tools_import</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> {</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  GtkWidget *dialog;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  dialog = gtk_file_chooser_dialog_new(_(<span class="stringliteral">"Import"</span>), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_FILE_CHOOSER_ACTION_OPEN, <span class="stringliteral">"Import"</span>,</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  GTK_RESPONSE_ACCEPT, NULL);</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  g_signal_connect(G_OBJECT(dialog), <span class="stringliteral">"response"</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#a85aa313453e0ecaa17bcce233973998d">remmina_main_action_tools_import_on_response</a>), NULL);</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  gtk_widget_show(dialog);</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div><div class="line"><a name="l01155"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#ab203476099a5ad6e889f91c8e05d577d"> 1155</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ab203476099a5ad6e889f91c8e05d577d">remmina_main_on_action_tools_export</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <a class="code" href="struct___remmina_file_plugin.html">RemminaFilePlugin</a> *plugin;</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  GtkWidget *dialog;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> </div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>)</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> </div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">if</span> (remminafile == NULL)</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  plugin = <a class="code" href="remmina__plugin__manager_8c.html#afce14b101da527ada9b44a4503e91e07">remmina_plugin_manager_get_export_file_handler</a>(remminafile);</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  <span class="keywordflow">if</span> (plugin) {</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  dialog = gtk_file_chooser_dialog_new(plugin-><a class="code" href="struct___remmina_file_plugin.html#ac4f2b0118490cede0577aaee9f2e0b5f">export_hints</a>, remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>,</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  GTK_FILE_CHOOSER_ACTION_SAVE, _(<span class="stringliteral">"_Save"</span>), GTK_RESPONSE_ACCEPT, NULL);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keywordflow">if</span> (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  plugin-><a class="code" href="struct___remmina_file_plugin.html#a8bf634ff09caba624ecf93c42e12af78">export_func</a>(plugin, remminafile, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  gtk_widget_destroy(dialog);</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  dialog = gtk_message_dialog_new(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  _(<span class="stringliteral">"This protocol does not support exporting."</span>));</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  g_signal_connect(G_OBJECT(dialog), <span class="stringliteral">"response"</span>, G_CALLBACK(gtk_widget_destroy), NULL);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  gtk_widget_show(dialog);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span> </div><div class="line"><a name="l01184"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#adf59ad5b0a0ef68e58bbea3701929efc"> 1184</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#adf59ad5b0a0ef68e58bbea3701929efc">remmina_main_on_action_application_plugins</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> {</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <a class="code" href="remmina__plugin__manager_8c.html#aedec4e9cf18d99a559aa51065c2bc276">remmina_plugin_manager_show</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> </div><div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a91f22c2834ac7f38d201d8d678f8c57b"> 1190</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a91f22c2834ac7f38d201d8d678f8c57b">remmina_main_on_action_application_dark_theme</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> {</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  GtkSettings *settings;</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  settings = gtk_settings_get_default();</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span> </div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">if</span> (gtk_switch_get_active(remminamain-><a class="code" href="struct___remmina_main.html#a912f2057752ad0779485c3303e3e9b04">switch_dark_mode</a>))</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a7c139ee405d50330b1d9bfb646c0258c">dark_theme</a> = 1;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a7c139ee405d50330b1d9bfb646c0258c">dark_theme</a> = 0;</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> </div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  g_object_set(settings, <span class="stringliteral">"gtk-application-prefer-dark-theme"</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a7c139ee405d50330b1d9bfb646c0258c">dark_theme</a>, NULL);</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span> }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span> </div><div class="line"><a name="l01206"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a7049d977154921f651cc1538f59c5b7a"> 1206</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a7049d977154921f651cc1538f59c5b7a">remmina_main_on_action_help_homepage</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> {</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  g_app_info_launch_default_for_uri(<span class="stringliteral">"https://www.remmina.org"</span>, NULL, NULL);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> }</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div><div class="line"><a name="l01212"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a0c32fe66988056b353220128611b9116"> 1212</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a0c32fe66988056b353220128611b9116">remmina_main_on_action_help_wiki</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> {</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  g_app_info_launch_default_for_uri(<span class="stringliteral">"https://gitlab.com/Remmina/Remmina/wikis/home"</span>, NULL, NULL);</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> </div><div class="line"><a name="l01218"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#aac3aa116a8d8b527f1aa61b7395b4b32"> 1218</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aac3aa116a8d8b527f1aa61b7395b4b32">remmina_main_on_action_help_community</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> {</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  g_app_info_launch_default_for_uri(<span class="stringliteral">"https://remmina.org/community"</span>, NULL, NULL);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span> }</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div><div class="line"><a name="l01224"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a2704d643ee15702a84a1c76219dd5277"> 1224</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a2704d643ee15702a84a1c76219dd5277">remmina_main_on_action_help_donations</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span> {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  g_app_info_launch_default_for_uri(<span class="stringliteral">"https://www.remmina.org/donations"</span>, NULL, NULL);</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span> }</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span> </div><div class="line"><a name="l01230"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a5db4436cc72b9d5ea3e498f8519efecc"> 1230</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a5db4436cc72b9d5ea3e498f8519efecc">remmina_main_on_action_help_debug</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> {</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  <a class="code" href="remmina__log_8c.html#a72cf53183f3ef89c4208fdccb629003d">remmina_log_start</a>();</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> }</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div><div class="line"><a name="l01236"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#aac0bb51159be042fecab0103e73a54dc"> 1236</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aac0bb51159be042fecab0103e73a54dc">remmina_main_on_action_application_about</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span> {</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <a class="code" href="remmina__about_8c.html#a3ad768979e0945a162018c6d596c90f4">remmina_about_open</a>(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span> };</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> </div><div class="line"><a name="l01242"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a0b4ec1e78b79adaa180a385ac50c20d6"> 1242</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a0b4ec1e78b79adaa180a385ac50c20d6">remmina_main_on_action_application_news</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> {</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  REMMINA_DEBUG(<span class="stringliteral">"Setting news counters to 0"</span>);</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">periodic_rmnews_last_get</a> = 0;</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a1b13dc96ccf8ebad045f02c58eb1d005">periodic_rmnews_get_count</a> = 0;</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  REMMINA_DEBUG(<span class="stringliteral">"Saving preferences"</span>);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span> };</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div><div class="line"><a name="l01252"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a1f5f9a964a75214d500e7a9fca1bd8a6"> 1252</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a1f5f9a964a75214d500e7a9fca1bd8a6">is_empty</a>(<span class="keyword">const</span> gchar *s)</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">if</span> (s == NULL)</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  <span class="keywordflow">while</span> (*s != 0) {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  <span class="keywordflow">if</span> (!isspace((<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>)*s))</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  s++;</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  }</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span> }</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span> </div><div class="line"><a name="l01264"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a802458852abacebfb16f1f4295806a01"> 1264</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a802458852abacebfb16f1f4295806a01">remmina_main_quickconnect</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  gchar *server;</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  gchar *server_trimmed;</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  gchar *qcp;</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> </div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="comment">/* Save quick connect protocol if different from the previous one */</span></div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  qcp = gtk_combo_box_text_get_active_text(remminamain-><a class="code" href="struct___remmina_main.html#a35f10af8065b3b64ba6f26db60061d39">combo_quick_connect_protocol</a>);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  <span class="keywordflow">if</span> (qcp && strcmp(qcp, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac31f888a39eec7ef6de922c7b53d044e">last_quickconnect_protocol</a>) != 0) {</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  g_free(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac31f888a39eec7ef6de922c7b53d044e">last_quickconnect_protocol</a>);</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac31f888a39eec7ef6de922c7b53d044e">last_quickconnect_protocol</a> = g_strdup(qcp);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  <a class="code" href="remmina__pref_8c.html#ae17aaf37449083a4322b6748c8f3a39f">remmina_pref_save</a>();</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  remminafile = <a class="code" href="remmina__file_8c.html#a5e421ba636d34e21bba5ece463e98892">remmina_file_new</a>();</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  server = g_strdup(gtk_entry_get_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>));</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  <span class="keywordflow">if</span> (g_hostname_to_ascii(server) == NULL)</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="comment">/* If server contain /, e.g. vnc://, it won't connect</span></div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span> <span class="comment"> * We could search for an array of invalid characters, but</span></div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span> <span class="comment"> * it's better to find a way to correctly parse and validate addresses</span></div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> <span class="comment"> */</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">if</span> (g_strrstr(server, <span class="stringliteral">"/"</span>) != NULL)</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  <span class="comment">//if (g_str_has_suffix (server, "/"))</span></div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <span class="comment">//return FALSE;</span></div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__main_8c.html#a1f5f9a964a75214d500e7a9fca1bd8a6">is_empty</a>(server))</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> </div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  <span class="comment">/* check if server is an IP address and trim whitespace if so */</span></div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  server_trimmed = g_strdup(server);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  g_strstrip(server_trimmed);</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  gchar **strings = g_strsplit(server_trimmed, <span class="stringliteral">":"</span>, 2);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">if</span> (strings[0] != NULL)</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  <span class="keywordflow">if</span> (g_hostname_is_ip_address(strings[0]))</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  g_stpcpy(server, server_trimmed);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span> </div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"sound"</span>, <span class="stringliteral">"off"</span>);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"server"</span>, server);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"name"</span>, server);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>(remminafile, <span class="stringliteral">"protocol"</span>, qcp);</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  g_free(server);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  g_free(server_trimmed);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  g_free(qcp);</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <a class="code" href="rcw_8c.html#a1b7a771392e15e527005305e71cc2546">rcw_open_from_file</a>(remminafile);</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span> </div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span> }</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span> </div><div class="line"><a name="l01318"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a210e9e04c7c97cc86412044de31f659d"> 1318</a></span> gboolean <a class="code" href="remmina__main_8c.html#a210e9e04c7c97cc86412044de31f659d">remmina_main_quickconnect_on_click</a>(GtkWidget *widget, gpointer user_data)</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span> {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE)</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__main_8c.html#a802458852abacebfb16f1f4295806a01">remmina_main_quickconnect</a>();</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> }</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> </div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="comment">/* Select all the text inside the quick search box if there is anything */</span></div><div class="line"><a name="l01327"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a6c69b2fa6a56869c54f58d7ebae89427"> 1327</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a6c69b2fa6a56869c54f58d7ebae89427">remmina_main_quick_search_enter</a>(GtkWidget *widget, gpointer user_data)</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span> {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <span class="keywordflow">if</span> (gtk_entry_get_text(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>))</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  gtk_editable_select_region(GTK_EDITABLE(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>), 0, -1);</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span> }</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> </div><div class="line"><a name="l01333"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a0edcc1d7dc3adcbb7bb36aa0f62dec3a"> 1333</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a0edcc1d7dc3adcbb7bb36aa0f62dec3a">remmina_main_on_action_collapse</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span> {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  gtk_tree_view_collapse_all(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span> }</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> </div><div class="line"><a name="l01339"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a9896df7a92402b5a61e58420235c515a"> 1339</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a9896df7a92402b5a61e58420235c515a">remmina_main_on_action_search_toggle</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> {</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>  REMMINA_DEBUG(<span class="stringliteral">"Search toggle triggered"</span>);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  gboolean toggle_status = gtk_toggle_button_get_active(remminamain-><a class="code" href="struct___remmina_main.html#acd8f3437eee668a2b8d905a16a16be72">search_toggle</a>);</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span> </div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  gtk_search_bar_set_search_mode(remminamain-><a class="code" href="struct___remmina_main.html#aecb54d7c3dd1e86a16e24ea2e00d4ddd">search_bar</a>, toggle_status);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keywordflow">if</span> (toggle_status) {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  REMMINA_DEBUG(<span class="stringliteral">"Search toggle is active"</span>);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  gtk_widget_grab_focus(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>));</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  REMMINA_DEBUG(<span class="stringliteral">"Search toggle is not active, focus is tree_files_list"</span>);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  gtk_widget_grab_focus(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>));</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span> }</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> </div><div class="line"><a name="l01355"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aea426b2e8fc03f963bb2b98cb8649adf"> 1355</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aea426b2e8fc03f963bb2b98cb8649adf">remmina_main_on_accel_search_toggle</a>(<a class="code" href="struct___remmina_main.html">RemminaMain</a> *remminamain)</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(remminamain-><a class="code" href="struct___remmina_main.html#acd8f3437eee668a2b8d905a16a16be72">search_toggle</a>), TRUE);</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> }</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div><div class="line"><a name="l01361"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#ab98d51c96a87fddaa2d5d6d4614bafa8"> 1361</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ab98d51c96a87fddaa2d5d6d4614bafa8">remmina_main_on_action_expand</a>(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> {</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  gtk_tree_view_expand_all(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span> }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> </div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="comment">/* Handle double click on a row in the connections list */</span></div><div class="line"><a name="l01368"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aba1a89a2400c5cc8373c6bd34602ac10"> 1368</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aba1a89a2400c5cc8373c6bd34602ac10">remmina_main_file_list_on_row_activated</a>(GtkTreeView *tree, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data)</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span> {</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span> <span class="comment">/* If a connection was selected then execute the default action */</span></div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a092aebd62ba9fe50c899e416361c1d00">selected_filename</a>) {</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>  <span class="keywordflow">switch</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a054a55a2c39181609150cbb4d22413ef">default_action</a>) {</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#a0ed680fdb405e7195d9f14032851eebba84fe14d6d19ab0479931a6886178f2e3">REMMINA_ACTION_EDIT</a>:</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>  <a class="code" href="remmina__main_8c.html#adfbfc580d25b58d09770a7d33ffe03cc">remmina_main_on_action_connection_edit</a>(NULL, NULL, NULL);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>  <span class="keywordflow">case</span> <a class="code" href="remmina__pref_8h.html#a0ed680fdb405e7195d9f14032851eebbad14d19fdcc60e744406c5f80c1bb840a">REMMINA_ACTION_CONNECT</a>:</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <a class="code" href="remmina__main_8c.html#a6b30ed832369f3a7153aa63f98873c9d">remmina_main_on_action_connection_connect</a>(NULL, NULL, NULL);</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  }</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  }</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span> }</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span> </div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="comment">/* Show the popup menu by the right button mouse click */</span></div><div class="line"><a name="l01386"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#ace72fa8f7198020464623e7117a351a9"> 1386</a></span> gboolean <a class="code" href="remmina__main_8c.html#ace72fa8f7198020464623e7117a351a9">remmina_main_file_list_on_button_press</a>(GtkWidget *widget, GdkEventButton *event, gpointer user_data)</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span> {</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  <span class="keywordflow">if</span> (event->button == MOUSE_BUTTON_RIGHT) {</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE)</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="preprocessor">#if GTK_CHECK_VERSION(3, 22, 0)</span></div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  gtk_menu_popup_at_pointer(GTK_MENU(remminamain-><a class="code" href="struct___remmina_main.html#a2d6960ab62869638a77d2fe5bd72c7f6">menu_popup</a>), (GdkEvent *)event);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>  gtk_menu_popup(remminamain-><a class="code" href="struct___remmina_main.html#a2d6960ab62869638a77d2fe5bd72c7f6">menu_popup</a>, NULL, NULL, NULL, NULL, event->button, event->time);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>  }</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span> }</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> </div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> <span class="comment">/* Show the popup menu by the menu key */</span></div><div class="line"><a name="l01401"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a31102f8ca7440a22c1514bca17933193"> 1401</a></span> gboolean <a class="code" href="remmina__main_8c.html#a31102f8ca7440a22c1514bca17933193">remmina_main_file_list_on_key_press</a>(GtkWidget *widget, GdkEventKey *event, gpointer user_data)</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span> {</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  <span class="keywordflow">if</span> (event->keyval == GDK_KEY_Menu) {</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> <span class="preprocessor">#if GTK_CHECK_VERSION(3, 22, 0)</span></div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  gtk_menu_popup_at_widget(GTK_MENU(remminamain-><a class="code" href="struct___remmina_main.html#a2d6960ab62869638a77d2fe5bd72c7f6">menu_popup</a>), widget,</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>  GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER,</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>  (GdkEvent *)event);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  gtk_menu_popup(remminamain-><a class="code" href="struct___remmina_main.html#a2d6960ab62869638a77d2fe5bd72c7f6">menu_popup</a>, NULL, NULL, NULL, NULL, 0, event->time);</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  }</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span> }</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> </div><div class="line"><a name="l01416"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#af51fc7233eb2397a5074ba37b5c5275f"> 1416</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#af51fc7233eb2397a5074ba37b5c5275f">remmina_main_quick_search_on_icon_press</a>(GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, gpointer user_data)</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span> {</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  <span class="keywordflow">if</span> (icon_pos == GTK_ENTRY_ICON_SECONDARY)</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  gtk_entry_set_text(entry, <span class="stringliteral">""</span>);</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> }</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> </div><div class="line"><a name="l01423"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a1cac4199e40e35bf3fcdb98841615657"> 1423</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a1cac4199e40e35bf3fcdb98841615657">remmina_main_quick_search_on_changed</a>(GtkEditable *editable, gpointer user_data)</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="comment">/* If a search text was input then temporary set the file mode to list */</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  <span class="keywordflow">if</span> (gtk_entry_get_text_length(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>)) {</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordflow">if</span> (GTK_IS_TREE_STORE(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#aec4c4540e9463a45b22a5c0b9108bc6f">file_model</a>)) {</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  <span class="comment">/* File view mode changed, put it to override and reload list */</span></div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a0307278dd7770ab490f4687f2eb00e76">override_view_file_mode_to_list</a> = TRUE;</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  }</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a0307278dd7770ab490f4687f2eb00e76">override_view_file_mode_to_list</a>) {</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  <span class="comment">/* File view mode changed, put it to default (disable override) and reload list */</span></div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a0307278dd7770ab490f4687f2eb00e76">override_view_file_mode_to_list</a> = FALSE;</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>  }</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>  }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#ae1e1d579bdb2517bd0f86408b9d5f97c">file_model_filter</a>));</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div><div class="line"><a name="l01443"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#adf073486149762f547504020484bff70"> 1443</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#adf073486149762f547504020484bff70">remmina_main_on_drag_data_received</a>(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y,</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>  GtkSelectionData *data, guint info, guint time, gpointer user_data)</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> {</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  gchar **uris;</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  GSList *files = NULL;</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>  gint i;</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span> </div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>  uris = g_uri_list_extract_uris((<span class="keyword">const</span> gchar *)gtk_selection_data_get_data(data));</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">for</span> (i = 0; uris[i]; i++) {</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  <span class="keywordflow">if</span> (strncmp(uris[i], <span class="stringliteral">"file://"</span>, 7) != 0)</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  files = g_slist_append(files, g_strdup(uris[i] + 7));</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>  }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>  g_strfreev(uris);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <a class="code" href="remmina__main_8c.html#ac767825cb87a34531306cfb587216d20">remmina_main_import_file_list</a>(files);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span> }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span> <span class="comment">/* Add a new menuitem to the Tools menu */</span></div><div class="line"><a name="l01462"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a7be10e330f0c2a3f74e119cde443786f"> 1462</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__main_8c.html#a7be10e330f0c2a3f74e119cde443786f">remmina_main_add_tool_plugin</a>(gchar *name, <a class="code" href="struct___remmina_plugin.html">RemminaPlugin</a> *plugin, gpointer user_data)</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  <a class="code" href="struct___remmina_tool_plugin.html">RemminaToolPlugin</a> *tool_plugin = (<a class="code" href="struct___remmina_tool_plugin.html">RemminaToolPlugin</a> *)plugin;</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>  GtkWidget *menuitem = gtk_menu_item_new_with_label(plugin-><a class="code" href="struct___remmina_plugin.html#a4ac66b7ebefb9bd8167737eb1af83cde">description</a>);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span> </div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>  gtk_widget_show(menuitem);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>  gtk_menu_shell_append(GTK_MENU_SHELL(remminamain-><a class="code" href="struct___remmina_main.html#a1575015519fedca001bb26e129331b62">menu_popup_full</a>), menuitem);</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  g_signal_connect(G_OBJECT(menuitem), <span class="stringliteral">"activate"</span>, G_CALLBACK(tool_plugin-><a class="code" href="struct___remmina_tool_plugin.html#ad83c522c030d51d5f0313b1f77f04d74">exec_func</a>), tool_plugin);</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> }</div><div class="line"><a name="l01473"></a><span class="lineno"> 1473</span> </div><div class="line"><a name="l01474"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#a861de52d1b5ec54591d0592de6289d79"> 1474</a></span> gboolean <a class="code" href="remmina__main_8c.html#a861de52d1b5ec54591d0592de6289d79">remmina_main_on_window_state_event</a>(GtkWidget *widget, GdkEventWindowState *event, gpointer user_data)</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> {</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> }</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> </div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">/* Remmina main window initialization */</span></div><div class="line"><a name="l01481"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#afefc1b651e1c546e949dbe6df72b0300"> 1481</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#afefc1b651e1c546e949dbe6df72b0300">remmina_main_init</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span> {</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>  <span class="keywordtype">int</span> i, qcp_idx, qcp_actidx;</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>  <span class="keywordtype">char</span> *name;</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>  GtkSettings *settings;</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>  REMMINA_DEBUG(<span class="stringliteral">"Initializing the Remmina main window"</span>);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>  <span class="comment">/* Switch to a dark theme if the user enabled it */</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  settings = gtk_settings_get_default();</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>  g_object_set(settings, <span class="stringliteral">"gtk-application-prefer-dark-theme"</span>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a7c139ee405d50330b1d9bfb646c0258c">dark_theme</a>, NULL);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> </div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>  REMMINA_DEBUG (<span class="stringliteral">"Initializing monitor"</span>);</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>  remminamain-><a class="code" href="struct___remmina_main.html#a0e6602776373cf6a198d249df6e87150">monitor</a> = <a class="code" href="remmina__monitor_8c.html#ac37c2579934e206d669c1af9b51f8ef1">remmina_network_monitor_new</a>();</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> </div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a467cf8ebc87ccdb68b9f88bce95c9f3a">expanded_group</a> = <a class="code" href="remmina__string__array_8c.html#a7f1c8e427a25c2d5cede3952b1d0ad90">remmina_string_array_new_from_string</a>(<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aa8d4c923cb9ca1be451436d1790e8ee5">expanded_group</a>);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE)</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>  gtk_window_set_title(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, _(<span class="stringliteral">"Remmina Remote Desktop Client"</span>));</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>  gtk_window_set_title(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, _(<span class="stringliteral">"Remmina Kiosk"</span>));</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE) {</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>  gtk_window_set_default_size(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a6318ff8e2f73d36fb8b35cbed503c222">main_width</a>, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#aeb86dc8005c98ce2eab57bd900467875">main_height</a>);</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#a8edfd2a9a9a06b1fd876fbe8742b9ff6">main_maximize</a>)</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>  gtk_window_maximize(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>  }</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>  <span class="comment">/* Honor global preferences Search Bar visibility */</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ae293a1fa591d3db78bd587c5af9c9101">hide_searchbar</a>)</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>  gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"search_toggle"</span>)), FALSE);</div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span> </div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>  <span class="comment">/* Add a GtkMenuItem to the Tools menu for each plugin of type REMMINA_PLUGIN_TYPE_TOOL */</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  <a class="code" href="remmina__plugin__manager_8c.html#a13f13a6a4280268656f258cb5aeff031">remmina_plugin_manager_for_each_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aadd037352a609e2dc890595f9d95bd1ac">REMMINA_PLUGIN_TYPE_TOOL</a>, <a class="code" href="remmina__main_8c.html#a7be10e330f0c2a3f74e119cde443786f">remmina_main_add_tool_plugin</a>, remminamain);</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> </div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>  <span class="comment">/* Add available quick connect protocols to remminamain->combo_quick_connect_protocol */</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>  qcp_idx = qcp_actidx = 0;</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>  <span class="keywordflow">for</span> (i = 0; i < <span class="keyword">sizeof</span>(<a class="code" href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c">quick_connect_plugin_list</a>) / <span class="keyword">sizeof</span>(<a class="code" href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c">quick_connect_plugin_list</a>[0]); i++) {</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  name = <a class="code" href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c">quick_connect_plugin_list</a>[i];</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a>(<a class="code" href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a>, name)) {</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>  gtk_combo_box_text_append(remminamain-><a class="code" href="struct___remmina_main.html#a35f10af8065b3b64ba6f26db60061d39">combo_quick_connect_protocol</a>, name, name);</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac31f888a39eec7ef6de922c7b53d044e">last_quickconnect_protocol</a> != NULL && strcmp(name, <a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ac31f888a39eec7ef6de922c7b53d044e">last_quickconnect_protocol</a>) == 0)</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>  qcp_actidx = qcp_idx;</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>  qcp_idx++;</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>  }</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>  }</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>  gtk_combo_box_set_active(GTK_COMBO_BOX(remminamain-><a class="code" href="struct___remmina_main.html#a35f10af8065b3b64ba6f26db60061d39">combo_quick_connect_protocol</a>), qcp_actidx);</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> </div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>  <span class="comment">/* Connect the group accelerators to the GtkWindow */</span></div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <span class="comment">//gtk_window_add_accel_group(remminamain->window, remminamain->accelgroup_shortcuts);</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>  <span class="comment">/* Set the Quick Connection */</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>  gtk_entry_set_activates_default(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, TRUE);</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <span class="comment">/* Set the TreeView for the files list */</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  gtk_tree_selection_set_select_function(</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>  gtk_tree_view_get_selection(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>),</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>  <a class="code" href="remmina__main_8c.html#a3c5043279b5d98d4d08635d33402ea66">remmina_main_selection_func</a>, NULL, NULL);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>  gtk_tree_view_set_search_entry(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, GTK_ENTRY(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>));</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>  <span class="keywordflow">if</span> (<a class="code" href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a>.<a class="code" href="struct___remmina_pref.html#ae293a1fa591d3db78bd587c5af9c9101">hide_searchbar</a>)</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>  gtk_widget_grab_focus(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>));</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>  <span class="comment">/* Load the files list */</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> </div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>  <span class="comment">/* Drag-n-drop support */</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  gtk_drag_dest_set(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>), GTK_DEST_DEFAULT_ALL, <a class="code" href="remmina__main_8c.html#a8ccd8303ada6e26880504fc58812fbda">remmina_drop_types</a>, 1, GDK_ACTION_COPY);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>  <span class="comment">/* Finish initialization */</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a7a4eb201dd185ba606af5c486ef55e7f">initialized</a> = TRUE;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> </div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  <span class="comment">/* Register the window in remmina_widget_pool with GType=GTK_WINDOW and TAG=remmina-main-window */</span></div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>  g_object_set_data(G_OBJECT(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>), <span class="stringliteral">"tag"</span>, <span class="stringliteral">"remmina-main-window"</span>);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>  <a class="code" href="remmina__widget__pool_8c.html#ae3c9c9853eb5bedbfeadbfac1d495b95">remmina_widget_pool_register</a>(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>));</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span> }</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span> </div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="comment">/* Signal handler for "show" on remminamain->window */</span></div><div class="line"><a name="l01553"></a><span class="lineno"><a class="line" href="remmina__main_8c.html#aa4d9b76d32fa500f4b9f39a19e4eaaf2"> 1553</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#aa4d9b76d32fa500f4b9f39a19e4eaaf2">remmina_main_on_show</a>(GtkWidget *w, gpointer user_data)</div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span> {</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span> <span class="preprocessor">#ifdef SNAP_BUILD</span></div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>  <a class="code" href="remmina__main_8c.html#ab08aae433b625c3a84330630fe2bd2d5">remmina_main_show_snap_welcome</a>();</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> }</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">/* RemminaMain instance */</span></div><div class="line"><a name="l01562"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a0c322c3136c4225d5f8d4cee318afce7"> 1562</a></span> GtkWidget *<a class="code" href="remmina__main_8c.html#af14b1942a754d7b2f5c10266208ebe01">remmina_main_new</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span> {</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>  GSimpleActionGroup *actions;</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>  GtkAccelGroup *accel_group = NULL;</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span> </div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  remminamain = g_new0(<a class="code" href="struct___remmina_main.html">RemminaMain</a>, 1);</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a> = g_new0(<a class="code" href="struct___remmina_main_priv.html">RemminaMainPriv</a>, 1);</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  <span class="comment">/* Assign UI widgets to the private members */</span></div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>  remminamain-><a class="code" href="struct___remmina_main.html#ab7c6aebff1b06ef97c36bfa9d360b0c1">builder</a> = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">"/org/remmina/Remmina/src/../data/ui/remmina_main.glade"</span>);</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>  remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a> = GTK_WINDOW(RM_GET_OBJECT(<span class="stringliteral">"RemminaMain"</span>));</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE) {</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>  gtk_window_set_position(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_WIN_POS_CENTER_ALWAYS);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>  gtk_window_set_default_size(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, 800, 400);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  gtk_window_set_resizable(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, FALSE);</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>  }</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>  <span class="comment">/* New Button */</span></div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  remminamain-><a class="code" href="struct___remmina_main.html#a4db5c4960c9dbe3e798528bacb31456e">button_new</a> = GTK_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"button_new"</span>));</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE)</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  gtk_widget_set_sensitive(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a4db5c4960c9dbe3e798528bacb31456e">button_new</a>), FALSE);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  <span class="comment">/* Search bar */</span></div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>  remminamain-><a class="code" href="struct___remmina_main.html#acd8f3437eee668a2b8d905a16a16be72">search_toggle</a> = GTK_TOGGLE_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"search_toggle"</span>));</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>  remminamain-><a class="code" href="struct___remmina_main.html#aecb54d7c3dd1e86a16e24ea2e00d4ddd">search_bar</a> = GTK_SEARCH_BAR(RM_GET_OBJECT(<span class="stringliteral">"search_bar"</span>));</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>  <span class="comment">/* view mode list/tree */</span></div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>  remminamain-><a class="code" href="struct___remmina_main.html#ae3c2c0b9855bb44b5b9a27a3178d32e7">view_toggle_button</a> = GTK_TOGGLE_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"view_toggle_button"</span>));</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE)</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  gtk_widget_set_sensitive(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#ae3c2c0b9855bb44b5b9a27a3178d32e7">view_toggle_button</a>), FALSE);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>  <span class="comment">/* Menu widgets */</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>  remminamain-><a class="code" href="struct___remmina_main.html#a2d6960ab62869638a77d2fe5bd72c7f6">menu_popup</a> = GTK_MENU(RM_GET_OBJECT(<span class="stringliteral">"menu_popup"</span>));</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>  remminamain-><a class="code" href="struct___remmina_main.html#ab3be770af5f21758fa641b274ca967ec">menu_header_button</a> = GTK_MENU_BUTTON(RM_GET_OBJECT(<span class="stringliteral">"menu_header_button"</span>));</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>  remminamain-><a class="code" href="struct___remmina_main.html#a1575015519fedca001bb26e129331b62">menu_popup_full</a> = GTK_MENU(RM_GET_OBJECT(<span class="stringliteral">"menu_popup_full"</span>));</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE) {</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  gtk_widget_set_sensitive(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a1575015519fedca001bb26e129331b62">menu_popup_full</a>), FALSE);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>  gtk_widget_set_sensitive(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#ab3be770af5f21758fa641b274ca967ec">menu_header_button</a>), FALSE);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>  }</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>  <span class="comment">/* View mode radios */</span></div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>  remminamain-><a class="code" href="struct___remmina_main.html#a6288ed69d372d1047ce94c74e77e0fd4">menuitem_view_mode_list</a> = GTK_RADIO_MENU_ITEM(RM_GET_OBJECT(<span class="stringliteral">"menuitem_view_mode_list"</span>));</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  remminamain-><a class="code" href="struct___remmina_main.html#a670425eaf7430854a172ee0f41c4e5e0">menuitem_view_mode_tree</a> = GTK_RADIO_MENU_ITEM(RM_GET_OBJECT(<span class="stringliteral">"menuitem_view_mode_tree"</span>));</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>  <span class="comment">/* Quick connect objects */</span></div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  remminamain-><a class="code" href="struct___remmina_main.html#a7b03d239c21141a202d0698492cfae95">box_quick_connect</a> = GTK_BOX(RM_GET_OBJECT(<span class="stringliteral">"box_quick_connect"</span>));</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>  remminamain-><a class="code" href="struct___remmina_main.html#a35f10af8065b3b64ba6f26db60061d39">combo_quick_connect_protocol</a> = GTK_COMBO_BOX_TEXT(RM_GET_OBJECT(<span class="stringliteral">"combo_quick_connect_protocol"</span>));</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == TRUE)</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>  gtk_widget_set_sensitive(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a35f10af8065b3b64ba6f26db60061d39">combo_quick_connect_protocol</a>), FALSE);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>  remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a> = GTK_ENTRY(RM_GET_OBJECT(<span class="stringliteral">"entry_quick_connect_server"</span>));</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>  <span class="comment">/* Other widgets */</span></div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a> = GTK_TREE_VIEW(RM_GET_OBJECT(<span class="stringliteral">"tree_files_list"</span>));</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  remminamain-><a class="code" href="struct___remmina_main.html#aa2b3c232b59da2278215d446b93db0e5">column_files_list_name</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_name"</span>));</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>  remminamain-><a class="code" href="struct___remmina_main.html#a56ac6ffe61c0d3663ebc6b26e65a8cbc">column_files_list_group</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_group"</span>));</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>  remminamain-><a class="code" href="struct___remmina_main.html#a7db532834f4fd6360956cb0e2383b0fb">column_files_list_server</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_server"</span>));</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>  remminamain-><a class="code" href="struct___remmina_main.html#a8e21f782dd6e0a6d80f0f622898b2a48">column_files_list_plugin</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_plugin"</span>));</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>  remminamain-><a class="code" href="struct___remmina_main.html#a1ffeff8198ae0dc7c2461001118fcc5a">column_files_list_date</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_date"</span>));</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  remminamain-><a class="code" href="struct___remmina_main.html#ab743fa626843d8fbb669fbd01819aea9">column_files_list_notes</a> = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT(<span class="stringliteral">"column_files_list_notes"</span>));</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>  gtk_tree_view_column_set_fixed_width(remminamain-><a class="code" href="struct___remmina_main.html#ab743fa626843d8fbb669fbd01819aea9">column_files_list_notes</a>, 100);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>  remminamain-><a class="code" href="struct___remmina_main.html#acacd90f3e6df6a864154edba01464ae2">statusbar_main</a> = GTK_STATUSBAR(RM_GET_OBJECT(<span class="stringliteral">"statusbar_main"</span>));</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  <span class="comment">/* signals */</span></div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>  g_signal_connect(remminamain-><a class="code" href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">entry_quick_connect_server</a>, <span class="stringliteral">"key-release-event"</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#af129aea3f5f3ec56b061187a81d43e4c">remmina_main_search_key_event</a>), NULL);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>  g_signal_connect(remminamain-><a class="code" href="struct___remmina_main.html#a81f987e527d521be54aaf3f46dfe7ced">tree_files_list</a>, <span class="stringliteral">"row-activated"</span>, G_CALLBACK(<a class="code" href="remmina__main_8c.html#a4477897686d091d6f57e7f9401674a8c">remmina_main_tree_row_activated</a>), NULL);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  <span class="comment">/* Non widget objects */</span></div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>  actions = g_simple_action_group_new();</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  g_action_map_add_action_entries(G_ACTION_MAP(actions), <a class="code" href="remmina__main_8c.html#a923b3e2712d969eb59d9291e99f933e8">app_actions</a>, G_N_ELEMENTS(<a class="code" href="remmina__main_8c.html#a923b3e2712d969eb59d9291e99f933e8">app_actions</a>), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  gtk_widget_insert_action_group(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>), <span class="stringliteral">"app"</span>, G_ACTION_GROUP(actions));</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>  g_action_map_add_action_entries(G_ACTION_MAP(actions), <a class="code" href="remmina__main_8c.html#af146cc1f982c98a9c8a5ac43cc1508f3">main_actions</a>, G_N_ELEMENTS(<a class="code" href="remmina__main_8c.html#af146cc1f982c98a9c8a5ac43cc1508f3">main_actions</a>), remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>  gtk_widget_insert_action_group(GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>), <span class="stringliteral">"main"</span>, G_ACTION_GROUP(actions));</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  g_object_unref(actions);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>  <span class="comment">/* Accelerators */</span></div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>  accel_group = gtk_accel_group_new();</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  gtk_window_add_accel_group(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, accel_group);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  gtk_accel_group_connect(accel_group, GDK_KEY_Q, GDK_CONTROL_MASK, 0,</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>  g_cclosure_new_swap(G_CALLBACK(<a class="code" href="remmina__main_8c.html#a5445e5568a6fc04d08b620829a59334a">remmina_main_on_action_application_quit</a>), NULL, NULL));</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  <span class="comment">// TODO: This crash remmina because the function doesn't receive the parameter we expect</span></div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>  gtk_accel_group_connect(accel_group, GDK_KEY_P, GDK_CONTROL_MASK, 0,</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>  g_cclosure_new_swap(G_CALLBACK(<a class="code" href="remmina__main_8c.html#a1e8b7e8c0f7a47dc0409ae6eb18cfc6a">remmina_main_on_accel_application_preferences</a>), NULL, NULL));</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>  gtk_accel_group_connect(accel_group, GDK_KEY_F, GDK_CONTROL_MASK, 0,</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>  g_cclosure_new_swap(G_CALLBACK(<a class="code" href="remmina__main_8c.html#aea426b2e8fc03f963bb2b98cb8649adf">remmina_main_on_accel_search_toggle</a>), remminamain, NULL));</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> </div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>  <span class="comment">/* Connect signals */</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>  gtk_builder_connect_signals(remminamain-><a class="code" href="struct___remmina_main.html#ab7c6aebff1b06ef97c36bfa9d360b0c1">builder</a>, NULL);</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>  <span class="comment">/* Initialize the window and load the preferences */</span></div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>  <a class="code" href="remmina__main_8c.html#afefc1b651e1c546e949dbe6df72b0300">remmina_main_init</a>();</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>  <span class="keywordflow">return</span> GTK_WIDGET(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span> }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> </div><div class="line"><a name="l01645"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a3948142732379a3d165f3b0b4d5f5abc"> 1645</a></span> GtkWindow *<a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>()</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span> {</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>  <span class="keywordflow">if</span> (!remminamain)</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>)</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>  <span class="keywordflow">if</span> (!remminamain-><a class="code" href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">priv</a>-><a class="code" href="struct___remmina_main_priv.html#a7a4eb201dd185ba606af5c486ef55e7f">initialized</a>)</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>  remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a> = GTK_WINDOW(RM_GET_OBJECT(<span class="stringliteral">"RemminaMain"</span>));</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>  <span class="keywordflow">return</span> remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>;</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span> }</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div><div class="line"><a name="l01657"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#a5ae0372dafe41f96a09097c07d1b270a"> 1657</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#a5ae0372dafe41f96a09097c07d1b270a">remmina_main_update_file_datetime</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *file)</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span> {</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>  <span class="keywordflow">if</span> (!remminamain)</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  <a class="code" href="remmina__main_8c.html#a3617295e74fa84edbd41dedc601402a7">remmina_main_load_files</a>();</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> }</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span> </div><div class="line"><a name="l01664"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#ab2a1a54320992fb796850ffbd6a63589"> 1664</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ab2a1a54320992fb796850ffbd6a63589">remmina_main_show_dialog</a>(GtkMessageType msg, GtkButtonsType buttons, <span class="keyword">const</span> gchar* message) {</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>  GtkWidget *dialog;</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span> </div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) {</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>  dialog = gtk_message_dialog_new(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_DIALOG_MODAL, msg, buttons, <span class="stringliteral">"%s"</span>, message);</div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>  gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>  gtk_widget_destroy(dialog);</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>  }</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> }</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span> </div><div class="line"><a name="l01674"></a><span class="lineno"><a class="line" href="remmina__main_8h.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7"> 1674</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a>(<span class="keyword">const</span> gchar *message) {</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  GtkWidget *dialog;</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span> </div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  <span class="keywordflow">if</span> (remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>) {</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  dialog = gtk_message_dialog_new(remminamain-><a class="code" href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">window</a>, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>  message, g_get_application_name());</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>  gtk_dialog_run(GTK_DIALOG(dialog));</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  gtk_widget_destroy(dialog);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>  }</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span> }</div><div class="ttc" id="remmina__file__manager_8h_html_a0155f52ba9a28e2aa0ea5d831f5d2c90"><div class="ttname"><a href="remmina__file__manager_8h.html#a0155f52ba9a28e2aa0ea5d831f5d2c90">RemminaGroupData</a></div><div class="ttdeci">G_BEGIN_DECLS struct _RemminaGroupData RemminaGroupData</div></div> -<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a5e79d6abd0b12c1ed2bb33988e41857e"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a5e79d6abd0b12c1ed2bb33988e41857e">remmina_secret_plugin</a></div><div class="ttdeci">static RemminaSecretPlugin * remmina_secret_plugin</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00068">remmina_plugin_manager.c:68</a></div></div> <div class="ttc" id="remmina__log_8c_html_a72cf53183f3ef89c4208fdccb629003d"><div class="ttname"><a href="remmina__log_8c.html#a72cf53183f3ef89c4208fdccb629003d">remmina_log_start</a></div><div class="ttdeci">void remmina_log_start(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__log_8c_source.html#l00116">remmina_log.c:116</a></div></div> <div class="ttc" id="remmina__main_8c_html_af146cc1f982c98a9c8a5ac43cc1508f3"><div class="ttname"><a href="remmina__main_8c.html#af146cc1f982c98a9c8a5ac43cc1508f3">main_actions</a></div><div class="ttdeci">static GActionEntry main_actions[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00109">remmina_main.c:109</a></div></div> <div class="ttc" id="struct___remmina_pref_html_ae293a1fa591d3db78bd587c5af9c9101"><div class="ttname"><a href="struct___remmina_pref.html#ae293a1fa591d3db78bd587c5af9c9101">_RemminaPref::hide_searchbar</a></div><div class="ttdeci">gboolean hide_searchbar</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00154">remmina_pref.h:154</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="struct___remmina_plugin_html"><div class="ttname"><a href="struct___remmina_plugin.html">_RemminaPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00056">plugin.h:56</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> <div class="ttc" id="struct___remmina_main_html_acd8f3437eee668a2b8d905a16a16be72"><div class="ttname"><a href="struct___remmina_main.html#acd8f3437eee668a2b8d905a16a16be72">_RemminaMain::search_toggle</a></div><div class="ttdeci">GtkToggleButton * search_toggle</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00061">remmina_main.h:61</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="struct___remmina_main_html_a6288ed69d372d1047ce94c74e77e0fd4"><div class="ttname"><a href="struct___remmina_main.html#a6288ed69d372d1047ce94c74e77e0fd4">_RemminaMain::menuitem_view_mode_list</a></div><div class="ttdeci">GtkRadioMenuItem * menuitem_view_mode_list</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00054">remmina_main.h:54</a></div></div> <div class="ttc" id="remmina__main_8c_html_ae32574ebe06b1a24f135af9379e663b4"><div class="ttname"><a href="remmina__main_8c.html#ae32574ebe06b1a24f135af9379e663b4">remmina_main_load_file_tree_callback</a></div><div class="ttdeci">static void remmina_main_load_file_tree_callback(RemminaFile *remminafile, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00480">remmina_main.c:480</a></div></div> <div class="ttc" id="struct___remmina_tool_plugin_html"><div class="ttname"><a href="struct___remmina_tool_plugin.html">_RemminaToolPlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00114">plugin.h:114</a></div></div> @@ -112,7 +112,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> <div class="ttc" id="struct___remmina_main_html_a45e6df8230d849a78e547fd542d76980"><div class="ttname"><a href="struct___remmina_main.html#a45e6df8230d849a78e547fd542d76980">_RemminaMain::priv</a></div><div class="ttdeci">RemminaMainPriv * priv</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00083">remmina_main.h:83</a></div></div> <div class="ttc" id="struct___remmina_file_plugin_html"><div class="ttname"><a href="struct___remmina_file_plugin.html">_RemminaFilePlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00100">plugin.h:100</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="remmina__main_8c_html_a6b30ed832369f3a7153aa63f98873c9d"><div class="ttname"><a href="remmina__main_8c.html#a6b30ed832369f3a7153aa63f98873c9d">remmina_main_on_action_connection_connect</a></div><div class="ttdeci">void remmina_main_on_action_connection_connect(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00765">remmina_main.c:765</a></div></div> <div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aadd037352a609e2dc890595f9d95bd1ac"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aadd037352a609e2dc890595f9d95bd1ac">REMMINA_PLUGIN_TYPE_TOOL</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00050">plugin.h:50</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> @@ -153,7 +153,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__mpchange_8h_html"><div class="ttname"><a href="remmina__mpchange_8h.html">remmina_mpchange.h</a></div></div> <div class="ttc" id="remmina__about_8h_html"><div class="ttname"><a href="remmina__about_8h.html">remmina_about.h</a></div></div> <div class="ttc" id="remmina__icon_8c_html_af80ed314f91d653237249d839c7fc3b2"><div class="ttname"><a href="remmina__icon_8c.html#af80ed314f91d653237249d839c7fc3b2">remmina_icon_populate_menu</a></div><div class="ttdeci">void remmina_icon_populate_menu(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__icon_8c_source.html#l00250">remmina_icon.c:250</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01020">remmina_file.c:1020</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a96abbfdc183d1e82fdffd6445d611ffe"><div class="ttname"><a href="remmina__file_8c.html#a96abbfdc183d1e82fdffd6445d611ffe">remmina_file_get_datetime</a></div><div class="ttdeci">gchar * remmina_file_get_datetime(RemminaFile *remminafile)</div><div class="ttdoc">Return the string date of the last time a Remmina state file has been modified. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01029">remmina_file.c:1029</a></div></div> <div class="ttc" id="remmina__main_8c_html_a71fbe206a9c2abb8f348ee598d7751b7"><div class="ttname"><a href="remmina__main_8c.html#a71fbe206a9c2abb8f348ee598d7751b7">remmina_main_file_model_on_sort</a></div><div class="ttdeci">static void remmina_main_file_model_on_sort(GtkTreeSortable *sortable, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00512">remmina_main.c:512</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a6318ff8e2f73d36fb8b35cbed503c222"><div class="ttname"><a href="struct___remmina_pref.html#a6318ff8e2f73d36fb8b35cbed503c222">_RemminaPref::main_width</a></div><div class="ttdeci">gint main_width</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00215">remmina_pref.h:215</a></div></div> <div class="ttc" id="remmina__main_8c_html_af14b1942a754d7b2f5c10266208ebe01"><div class="ttname"><a href="remmina__main_8c.html#af14b1942a754d7b2f5c10266208ebe01">remmina_main_new</a></div><div class="ttdeci">GtkWidget * remmina_main_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01562">remmina_main.c:1562</a></div></div> @@ -210,7 +210,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__main_8c_html_ad99b9c0bf2fa8c166a8b4a09e06ffdf7"><div class="ttname"><a href="remmina__main_8c.html#ad99b9c0bf2fa8c166a8b4a09e06ffdf7">remmina_main_show_warning_dialog</a></div><div class="ttdeci">void remmina_main_show_warning_dialog(const gchar *message)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01674">remmina_main.c:1674</a></div></div> <div class="ttc" id="remmina__main_8c_html_a52cc21537ff003b9d0fbdb9040c811af"><div class="ttname"><a href="remmina__main_8c.html#a52cc21537ff003b9d0fbdb9040c811af">remmina_main_on_action_connection_new</a></div><div class="ttdeci">void remmina_main_on_action_connection_new(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00848">remmina_main.c:848</a></div></div> <div class="ttc" id="remmina__main_8c_html_a6c69b2fa6a56869c54f58d7ebae89427"><div class="ttname"><a href="remmina__main_8c.html#a6c69b2fa6a56869c54f58d7ebae89427">remmina_main_quick_search_enter</a></div><div class="ttdeci">void remmina_main_quick_search_enter(GtkWidget *widget, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01327">remmina_main.c:1327</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00900">remmina_file.c:900</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a55f66f2bb81bf427d6837e1adb7fe1d4"><div class="ttname"><a href="remmina__file_8c.html#a55f66f2bb81bf427d6837e1adb7fe1d4">remmina_file_delete</a></div><div class="ttdeci">void remmina_file_delete(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00909">remmina_file.c:909</a></div></div> <div class="ttc" id="struct___remmina_main_html_a4db5c4960c9dbe3e798528bacb31456e"><div class="ttname"><a href="struct___remmina_main.html#a4db5c4960c9dbe3e798528bacb31456e">_RemminaMain::button_new</a></div><div class="ttdeci">GtkButton * button_new</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00058">remmina_main.h:58</a></div></div> <div class="ttc" id="struct___remmina_main_html_a1575015519fedca001bb26e129331b62"><div class="ttname"><a href="struct___remmina_main.html#a1575015519fedca001bb26e129331b62">_RemminaMain::menu_popup_full</a></div><div class="ttdeci">GtkMenu * menu_popup_full</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00053">remmina_main.h:53</a></div></div> <div class="ttc" id="remmina__main_8c_html_a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3"><div class="ttname"><a href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a348c0cf6892b36818d9825dddc25f8e3">NOTES_COLUMN</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00079">remmina_main.c:79</a></div></div> @@ -232,7 +232,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__pref_8c_html_a9a8d02227eb703bccc3f9296a5d89d6f"><div class="ttname"><a href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a></div><div class="ttdeci">gboolean remmina_pref_get_boolean(const gchar *key)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01179">remmina_pref.c:1179</a></div></div> <div class="ttc" id="struct___remmina_pref_html_ab43c3da7d8551c9df726996c540726f1"><div class="ttname"><a href="struct___remmina_pref.html#ab43c3da7d8551c9df726996c540726f1">_RemminaPref::view_file_mode</a></div><div class="ttdeci">gint view_file_mode</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00211">remmina_pref.h:211</a></div></div> <div class="ttc" id="remmina__string__array_8c_html_aff90e964c6541b1af02adf7ea39e6e02"><div class="ttname"><a href="remmina__string__array_8c.html#aff90e964c6541b1af02adf7ea39e6e02">remmina_string_array_new</a></div><div class="ttdeci">RemminaStringArray * remmina_string_array_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__string__array_8c_source.html#l00044">remmina_string_array.c:44</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01089">remmina_file.c:1089</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3d19095f74e9b7c92d74f11bd5a39a8c"><div class="ttname"><a href="remmina__file_8c.html#a3d19095f74e9b7c92d74f11bd5a39a8c">remmina_file_touch</a></div><div class="ttdeci">void remmina_file_touch(RemminaFile *remminafile)</div><div class="ttdoc">Update the atime and mtime of a given filename. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l01103">remmina_file.c:1103</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_aa9345cfe3fb32d326b652e96ee55eaea"><div class="ttname"><a href="remmina__file__editor_8c.html#aa9345cfe3fb32d326b652e96ee55eaea">remmina_file_editor_new_from_filename</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new_from_filename(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02071">remmina_file_editor.c:2071</a></div></div> <div class="ttc" id="remmina__main_8c_html_a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb"><div class="ttname"><a href="remmina__main_8c.html#a385c44f6fb256e5716a2302a5b940388a6e22c76fbdeaa8f724eb996db2d528bb">DATE_COLUMN</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00076">remmina_main.c:76</a></div></div> <div class="ttc" id="remmina__main_8c_html_a51880fc109db6457a5d0fc543c2deaf2"><div class="ttname"><a href="remmina__main_8c.html#a51880fc109db6457a5d0fc543c2deaf2">remmina_main_save_expanded_group_func</a></div><div class="ttdeci">static void remmina_main_save_expanded_group_func(GtkTreeView *tree_view, GtkTreePath *path, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00147">remmina_main.c:147</a></div></div> @@ -257,7 +257,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__main_8c_html_a3d60de4c121cae0c82e60b13873073db"><div class="ttname"><a href="remmina__main_8c.html#a3d60de4c121cae0c82e60b13873073db">remmina_main_on_date_column_sort_clicked</a></div><div class="ttdeci">void remmina_main_on_date_column_sort_clicked()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01078">remmina_main.c:1078</a></div></div> <div class="ttc" id="rcw_8c_html_a29701ae152ba15f6d8921f395174d2df"><div class="ttname"><a href="rcw_8c.html#a29701ae152ba15f6d8921f395174d2df">remmina_pref</a></div><div class="ttdeci">RemminaPref remmina_pref</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l00075">rcw.c:75</a></div></div> <div class="ttc" id="remmina__main_8c_html_a31102f8ca7440a22c1514bca17933193"><div class="ttname"><a href="remmina__main_8c.html#a31102f8ca7440a22c1514bca17933193">remmina_main_file_list_on_key_press</a></div><div class="ttdeci">gboolean remmina_main_file_list_on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01401">remmina_main.c:1401</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__main_8c_html_a91f22c2834ac7f38d201d8d678f8c57b"><div class="ttname"><a href="remmina__main_8c.html#a91f22c2834ac7f38d201d8d678f8c57b">remmina_main_on_action_application_dark_theme</a></div><div class="ttdeci">void remmina_main_on_action_application_dark_theme(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01190">remmina_main.c:1190</a></div></div> <div class="ttc" id="remmina__about_8c_html_a3ad768979e0945a162018c6d596c90f4"><div class="ttname"><a href="remmina__about_8c.html#a3ad768979e0945a162018c6d596c90f4">remmina_about_open</a></div><div class="ttdeci">void remmina_about_open(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__about_8c_source.html#l00044">remmina_about.c:44</a></div></div> <div class="ttc" id="remmina__file__editor_8c_html_aa4e8657ca722e4cce3f3c42c0cfec51e"><div class="ttname"><a href="remmina__file__editor_8c.html#aa4e8657ca722e4cce3f3c42c0cfec51e">remmina_file_editor_new</a></div><div class="ttdeci">GtkWidget * remmina_file_editor_new(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file__editor_8c_source.html#l02032">remmina_file_editor.c:2032</a></div></div> @@ -280,9 +280,9 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina_8c_html_ab4a9a67c5372ff07b71d0558679ab7ae"><div class="ttname"><a href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a></div><div class="ttdeci">gboolean kioskmode</div><div class="ttdef"><b>Definition:</b> <a href="remmina_8c_source.html#l00082">remmina.c:82</a></div></div> <div class="ttc" id="struct___remmina_main_html_a82aa6f22340fc4f3df185aba7b01afc2"><div class="ttname"><a href="struct___remmina_main.html#a82aa6f22340fc4f3df185aba7b01afc2">_RemminaMain::window</a></div><div class="ttdeci">GtkWindow * window</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00049">remmina_main.h:49</a></div></div> <div class="ttc" id="remmina__exec_8c_html_aaa67e07e2426828d7e7b9b30d2038d31"><div class="ttname"><a href="remmina__exec_8c.html#aaa67e07e2426828d7e7b9b30d2038d31">remmina_application_condexit</a></div><div class="ttdeci">void remmina_application_condexit(RemminaCondExitType why)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__exec_8c_source.html#l00123">remmina_exec.c:123</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="remmina__main_8c_html_aace9ecdd0b74d392ad6ed541bd605c1c"><div class="ttname"><a href="remmina__main_8c.html#aace9ecdd0b74d392ad6ed541bd605c1c">quick_connect_plugin_list</a></div><div class="ttdeci">static char * quick_connect_plugin_list[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l00128">remmina_main.c:128</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> <div class="ttc" id="struct___remmina_main_html_ab743fa626843d8fbb669fbd01819aea9"><div class="ttname"><a href="struct___remmina_main.html#ab743fa626843d8fbb669fbd01819aea9">_RemminaMain::column_files_list_notes</a></div><div class="ttdeci">GtkTreeViewColumn * column_files_list_notes</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00078">remmina_main.h:78</a></div></div> <div class="ttc" id="remmina__main_8c_html_a802458852abacebfb16f1f4295806a01"><div class="ttname"><a href="remmina__main_8c.html#a802458852abacebfb16f1f4295806a01">remmina_main_quickconnect</a></div><div class="ttdeci">static gboolean remmina_main_quickconnect(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01264">remmina_main.c:1264</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a320861799b86dc076d5f87e3a216eb95"><div class="ttname"><a href="struct___remmina_pref.html#a320861799b86dc076d5f87e3a216eb95">_RemminaPref::always_show_notes</a></div><div class="ttdeci">gboolean always_show_notes</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00152">remmina_pref.h:152</a></div></div> @@ -294,7 +294,7 @@ $(document).ready(function(){initNavTree('remmina__main_8c_source.html','');}); <div class="ttc" id="remmina__main_8c_html_a5445e5568a6fc04d08b620829a59334a"><div class="ttname"><a href="remmina__main_8c.html#a5445e5568a6fc04d08b620829a59334a">remmina_main_on_action_application_quit</a></div><div class="ttdeci">void remmina_main_on_action_application_quit(GSimpleAction *action, GVariant *param, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01070">remmina_main.c:1070</a></div></div> <div class="ttc" id="struct___remmina_main_html_ac2eff9c56cc7830bcf9ca4bfdf216095"><div class="ttname"><a href="struct___remmina_main.html#ac2eff9c56cc7830bcf9ca4bfdf216095">_RemminaMain::entry_quick_connect_server</a></div><div class="ttdeci">GtkEntry * entry_quick_connect_server</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8h_source.html#l00069">remmina_main.h:69</a></div></div> <div class="ttc" id="remmina__unlock_8c_html_a81e79e5c1c230b7e2bf27b2457801d4e"><div class="ttname"><a href="remmina__unlock_8c.html#a81e79e5c1c230b7e2bf27b2457801d4e">remmina_unlock_new</a></div><div class="ttdeci">gint remmina_unlock_new(GtkWindow *parent)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__unlock_8c_source.html#l00112">remmina_unlock.c:112</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00874">remmina_file.c:874</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a2feb8e9e32f3ff4e2fac836e67a77331"><div class="ttname"><a href="remmina__file_8c.html#a2feb8e9e32f3ff4e2fac836e67a77331">remmina_file_get_icon_name</a></div><div class="ttdeci">const gchar * remmina_file_get_icon_name(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00883">remmina_file.c:883</a></div></div> <div class="ttc" id="struct___remmina_pref_html_a58fce08bda1efaeefd8b65f6463f67c6"><div class="ttname"><a href="struct___remmina_pref.html#a58fce08bda1efaeefd8b65f6463f67c6">_RemminaPref::periodic_rmnews_last_get</a></div><div class="ttdeci">glong periodic_rmnews_last_get</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00240">remmina_pref.h:240</a></div></div> <div class="ttc" id="remmina__mpchange_8c_html_aa5a382490ca5e92bc4b124f66d83c4ff"><div class="ttname"><a href="remmina__mpchange_8c.html#aa5a382490ca5e92bc4b124f66d83c4ff">remmina_mpchange_schedule</a></div><div class="ttdeci">void remmina_mpchange_schedule(gboolean has_domain, const gchar *group, const gchar *domain, const gchar *username, const gchar *password, const gchar *gatewayusername, const gchar *gatewaydomain, const gchar *gatewaypassword)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00497">remmina_mpchange.c:497</a></div></div> <div class="ttc" id="struct___remmina_pref_html_aeb86dc8005c98ce2eab57bd900467875"><div class="ttname"><a href="struct___remmina_pref.html#aeb86dc8005c98ce2eab57bd900467875">_RemminaPref::main_height</a></div><div class="ttdeci">gint main_height</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00216">remmina_pref.h:216</a></div></div> diff --git a/public/remmina__masterthread__exec_8c_source.html b/public/remmina__masterthread__exec_8c_source.html index 63455210a..d52f1e19e 100644 --- a/public/remmina__masterthread__exec_8c_source.html +++ b/public/remmina__masterthread__exec_8c_source.html @@ -87,7 +87,7 @@ $(document).ready(function(){initNavTree('remmina__masterthread__exec_8c_source. </div><!--header--> <div class="contents"> <a href="remmina__masterthread__exec_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">/* Support for execution on main thread of some GTK related</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="comment"> * functions (due to threads deprecations in GTK) */</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__masterthread__exec_8h.html">remmina_masterthread_exec.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8c.html#a8eeacd537241e5af184a2007c476baf0"> 44</a></span> <span class="keyword">static</span> pthread_t <a class="code" href="remmina__masterthread__exec_8c.html#a8eeacd537241e5af184a2007c476baf0">gMainThreadID</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8c.html#ae5c4d736f1856249c255430e010a179f"> 46</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__masterthread__exec_8c.html#ae5c4d736f1856249c255430e010a179f">remmina_masterthread_exec_callback</a>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d)</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="comment">/* This function is called on main GTK Thread via gdk_threads_add_idlde()</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment"> * from remmina_masterthread_exec_and_wait() */</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="keywordflow">if</span> (!d-><a class="code" href="structremmina__masterthread__exec__data.html#ac390f60a6ecc7312c7e4cbc1c4de0a63">cancelled</a>) {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">switch</span> (d-><a class="code" href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">func</a>) {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">case</span> FUNC_INIT_SAVE_CRED:</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a00585ef650a083f1e8270cbdf05d437f">init_save_creds</a>.gp);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">case</span> FUNC_CHAT_RECEIVE:</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="remmina__protocol__widget_8c.html#ae2522242b3f39ee84ee8cf75170de0c0">remmina_protocol_widget_chat_receive</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.gp, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">chat_receive</a>.text);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">case</span> FUNC_FILE_GET_STRING:</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.retval = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.remminafile, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac76a0900842e936efdd2add9ec352886">file_get_string</a>.setting );</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">case</span> FUNC_FILE_SET_STRING:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.remminafile, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.setting, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af4aac360c396741c659474158d7c0e87">file_set_string</a>.value );</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">case</span> FUNC_GTK_LABEL_SET_TEXT:</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  gtk_label_set_text( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a85a0c3a54c87297e585fac9d52cd83c1">gtk_label_set_text</a>.label, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a85a0c3a54c87297e585fac9d52cd83c1">gtk_label_set_text</a>.str );</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">case</span> FUNC_FTP_CLIENT_UPDATE_TASK:</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="remmina__ftp__client_8c.html#ad96358f40ab056c91f796ddda886a1dd">remmina_ftp_client_update_task</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#aacac54eb2616abc1a48d52f1cdcddf40">ftp_client_update_task</a>.client, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#aacac54eb2616abc1a48d52f1cdcddf40">ftp_client_update_task</a>.task );</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">case</span> FUNC_FTP_CLIENT_GET_WAITING_TASK:</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac6b3f7b8019945e2f0c8039f7a78fed6">ftp_client_get_waiting_task</a>.retval = <a class="code" href="remmina__ftp__client_8c.html#a33e4993b60c36eae89a6a0a943d28141">remmina_ftp_client_get_waiting_task</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#ac6b3f7b8019945e2f0c8039f7a78fed6">ftp_client_get_waiting_task</a>.client );</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">case</span> FUNC_PROTOCOLWIDGET_EMIT_SIGNAL:</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="remmina__protocol__widget_8c.html#ac3e5a7f14aef4adb2e57d35e9c180b3b">remmina_protocol_widget_emit_signal</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.gp, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">protocolwidget_emit_signal</a>.signal_name);</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">case</span> FUNC_PROTOCOLWIDGET_MPPROGRESS:</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.ret_mp = <a class="code" href="remmina__protocol__widget_8c.html#a78b123eca6709bceeacda7d791a94bf1">remmina_protocol_widget_mpprogress</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.cnnobj, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.message,</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a3b8dfbacdde21a1a75007cde8e31bfd6">protocolwidget_mpprogress</a>.response_callback_data);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">case</span> FUNC_PROTOCOLWIDGET_MPDESTROY:</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="remmina__protocol__widget_8c.html#a97cba8208a4348446159bf465b3233f5">remmina_protocol_widget_mpdestroy</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.cnnobj, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a75007c472a404959a00cdebd8efc951a">protocolwidget_mpdestroy</a>.mp);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">case</span> FUNC_PROTOCOLWIDGET_MPSHOWRETRY:</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="remmina__protocol__widget_8c.html#a7ed85f4ea19e0660dbf46f4f3dc4b895">remmina_protocol_widget_panel_show_retry</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#af47270db94513116a8c0f7658848c4af">protocolwidget_mpshowretry</a>.gp);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">case</span> FUNC_PROTOCOLWIDGET_PANELSHOWLISTEN:</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="remmina__protocol__widget_8c.html#a278e13b53a4fdb65498e00e908edb98d">remmina_protocol_widget_panel_show_listen</a>(d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.gp, d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a2852b6a6de556164946570c4d7786ece">protocolwidget_panelshowlisten</a>.port);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">case</span> FUNC_SFTP_CLIENT_CONFIRM_RESUME:</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#ifdef HAVE_LIBSSH</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a070d5e12c3eede1d1799d83c433f9abd">sftp_client_confirm_resume</a>.retval = <a class="code" href="remmina__sftp__client_8c.html#a138904893cb9c7f6535b8dfc7ba17e33">remmina_sftp_client_confirm_resume</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a070d5e12c3eede1d1799d83c433f9abd">sftp_client_confirm_resume</a>.client,</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#a070d5e12c3eede1d1799d83c433f9abd">sftp_client_confirm_resume</a>.path );</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">case</span> FUNC_VTE_TERMINAL_SET_ENCODING_AND_PTY:</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#if defined (HAVE_LIBSSH) && defined (HAVE_LIBVTE)</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="remmina__ssh__plugin_8c.html#adc8e3776e67abca9ab913bc33172e4ce">remmina_plugin_ssh_vte_terminal_set_encoding_and_pty</a>( d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#addc82d31b5441f2bf02630b9ddbe7fdb">vte_terminal_set_encoding_and_pty</a>.terminal,</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#addc82d31b5441f2bf02630b9ddbe7fdb">vte_terminal_set_encoding_and_pty</a>.codeset,</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#addc82d31b5441f2bf02630b9ddbe7fdb">vte_terminal_set_encoding_and_pty</a>.master,</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">p</a>.<a class="code" href="structremmina__masterthread__exec__data.html#addc82d31b5441f2bf02630b9ddbe7fdb">vte_terminal_set_encoding_and_pty</a>.slave);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  pthread_mutex_lock(&d-><a class="code" href="structremmina__masterthread__exec__data.html#ad6766566c40f5265a8ec504e56951319">pt_mutex</a>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#a2609267a5c4dcf8b9cbe411ee51656d9">complete</a> = TRUE;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  pthread_cond_signal(&d-><a class="code" href="structremmina__masterthread__exec__data.html#a41d44d1cc03512701f61bb88a983e94b">pt_cond</a>);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  pthread_mutex_unlock(&d-><a class="code" href="structremmina__masterthread__exec__data.html#ad6766566c40f5265a8ec504e56951319">pt_mutex</a>);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="comment">/* thread has been cancelled, so we must free d memory here */</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  g_free(d);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8c.html#a94985f15fd0d27c037824ee90b0ecd3c"> 118</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__masterthread__exec_8c.html#a94985f15fd0d27c037824ee90b0ecd3c">remmina_masterthread_exec_cleanup_handler</a>(gpointer data)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d = data;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ac390f60a6ecc7312c7e4cbc1c4de0a63">cancelled</a> = TRUE;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> }</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8h.html#a14628c2470cac50e87916a70ea05c97d"> 125</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__masterthread__exec_8c.html#a14628c2470cac50e87916a70ea05c97d">remmina_masterthread_exec_and_wait</a>(<a class="code" href="structremmina__masterthread__exec__data.html">RemminaMTExecData</a> *d)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#ac390f60a6ecc7312c7e4cbc1c4de0a63">cancelled</a> = FALSE;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  d-><a class="code" href="structremmina__masterthread__exec__data.html#a2609267a5c4dcf8b9cbe411ee51656d9">complete</a> = FALSE;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  pthread_cleanup_push(<a class="code" href="remmina__masterthread__exec_8c.html#a94985f15fd0d27c037824ee90b0ecd3c">remmina_masterthread_exec_cleanup_handler</a>, (<span class="keywordtype">void</span>*)d);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  pthread_mutex_init(&d->pt_mutex, NULL);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  pthread_cond_init(&d->pt_cond, NULL);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  gdk_threads_add_idle((GSourceFunc)<a class="code" href="remmina__masterthread__exec_8c.html#ae5c4d736f1856249c255430e010a179f">remmina_masterthread_exec_callback</a>, (gpointer)d);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  pthread_mutex_lock(&d->pt_mutex);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="keywordflow">while</span> (!d->complete)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  pthread_cond_wait(&d->pt_cond, &d->pt_mutex);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  pthread_cleanup_pop(0);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  pthread_mutex_destroy(&d->pt_mutex);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  pthread_cond_destroy(&d->pt_cond);</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> }</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8h.html#a3d6fe9efdc6b84c16d99809003cfc850"> 141</a></span> <span class="keywordtype">void</span> <a class="code" href="remmina__masterthread__exec_8c.html#a4a595ce198f8adda31fe11348b0f734e">remmina_masterthread_exec_save_main_thread_id</a>()</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">/* To be called from main thread at startup */</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="remmina__masterthread__exec_8c.html#a8eeacd537241e5af184a2007c476baf0">gMainThreadID</a> = pthread_self();</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="remmina__masterthread__exec_8h.html#a7b90b9539fd1bffa1fdace50f9caf29c"> 147</a></span> gboolean <a class="code" href="remmina__masterthread__exec_8c.html#a3a52e863a3a3da6da6bb5d36c13b7ff4">remmina_masterthread_exec_is_main_thread</a>()</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span> pthread_equal(<a class="code" href="remmina__masterthread__exec_8c.html#a8eeacd537241e5af184a2007c476baf0">gMainThreadID</a>, pthread_self()) != 0;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> }</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="ttc" id="structremmina__masterthread__exec__data_html_a00585ef650a083f1e8270cbdf05d437f"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#a00585ef650a083f1e8270cbdf05d437f">remmina_masterthread_exec_data::init_save_creds</a></div><div class="ttdeci">struct remmina_masterthread_exec_data::@12::@14 init_save_creds</div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ae2522242b3f39ee84ee8cf75170de0c0"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ae2522242b3f39ee84ee8cf75170de0c0">remmina_protocol_widget_chat_receive</a></div><div class="ttdeci">void remmina_protocol_widget_chat_receive(RemminaProtocolWidget *gp, const gchar *text)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l02030">remmina_protocol_widget.c:2030</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ab863cc1442a992adfa323bc77ab88504"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a></div><div class="ttdeci">void remmina_protocol_widget_save_cred(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01885">remmina_protocol_widget.c:1885</a></div></div> <div class="ttc" id="remmina__sftp__client_8c_html_a138904893cb9c7f6535b8dfc7ba17e33"><div class="ttname"><a href="remmina__sftp__client_8c.html#a138904893cb9c7f6535b8dfc7ba17e33">remmina_sftp_client_confirm_resume</a></div><div class="ttdeci">gint remmina_sftp_client_confirm_resume(RemminaSFTPClient *client, const gchar *path)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__sftp__client_8c_source.html#l00931">remmina_sftp_client.c:931</a></div></div> @@ -124,7 +124,7 @@ $(document).ready(function(){initNavTree('remmina__masterthread__exec_8c_source. <div class="ttc" id="structremmina__masterthread__exec__data_html_a6a00bf7132ed6d4923bd239acb073ace"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#a6a00bf7132ed6d4923bd239acb073ace">remmina_masterthread_exec_data::chat_receive</a></div><div class="ttdeci">struct remmina_masterthread_exec_data::@12::@15 chat_receive</div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_abea1e7f8f2ed7639f59907b622fba688"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#abea1e7f8f2ed7639f59907b622fba688">remmina_masterthread_exec_data::p</a></div><div class="ttdeci">union remmina_masterthread_exec_data::@12 p</div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_a46c919e7c8529074e19f46cf1b545f97"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#a46c919e7c8529074e19f46cf1b545f97">remmina_masterthread_exec_data::protocolwidget_emit_signal</a></div><div class="ttdeci">struct remmina_masterthread_exec_data::@12::@20 protocolwidget_emit_signal</div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_ab3d58f7a9847ce04c9dcd3917910fdb1"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#ab3d58f7a9847ce04c9dcd3917910fdb1">remmina_masterthread_exec_data::func</a></div><div class="ttdeci">enum remmina_masterthread_exec_data::@11 func</div></div> <div class="ttc" id="structremmina__masterthread__exec__data_html_ad6766566c40f5265a8ec504e56951319"><div class="ttname"><a href="structremmina__masterthread__exec__data.html#ad6766566c40f5265a8ec504e56951319">remmina_masterthread_exec_data::pt_mutex</a></div><div class="ttdeci">pthread_mutex_t pt_mutex</div><div class="ttdef"><b>Definition:</b> <a href="remmina__masterthread__exec_8h_source.html#l00126">remmina_masterthread_exec.h:126</a></div></div> </div><!-- fragment --></div><!-- contents --> diff --git a/public/remmina__monitor_8c_source.html b/public/remmina__monitor_8c_source.html index 2c5387035..520d7264f 100644 --- a/public/remmina__monitor_8c_source.html +++ b/public/remmina__monitor_8c_source.html @@ -86,7 +86,7 @@ $(document).ready(function(){initNavTree('remmina__monitor_8c_source.html','');} <div class="title">remmina_monitor.c</div> </div> </div><!--header--> <div class="contents"> -<a href="remmina__monitor_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="remmina__monitor_8h.html">remmina_monitor.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd"> 41</a></span> <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *<a class="code" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd">rm_monitor</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca"> 43</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca">remmina_monitor_can_reach_cb</a> (GNetworkMonitor *netmonitor, GAsyncResult *result, <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *monitor)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  g_autoptr (GError) error = NULL;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  gchar *status = NULL;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  gboolean is_reachable = g_network_monitor_can_reach_finish (netmonitor, result, &error);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> gchar *addr_tostr = g_strdup(g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">//gchar *value = (gchar *)g_hash_table_lookup (monitor->server_status, addr_tostr);</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (is_reachable) {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  REMMINA_DEBUG (<span class="stringliteral">"Network object %s is reachable"</span>, g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  status = g_strdup (<span class="stringliteral">"online"</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  REMMINA_DEBUG (<span class="stringliteral">"Network object %s is not reachable"</span>, g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  status = g_strdup (<span class="stringliteral">"offline"</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">if</span> (g_hash_table_replace (monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a>, g_strdup(addr_tostr), g_strdup(status))) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  REMMINA_DEBUG (<span class="stringliteral">"Inserting %s -> %s"</span>, addr_tostr, status);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  REMMINA_DEBUG (<span class="stringliteral">"Replacing %s -> %s"</span>, addr_tostr, status);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">/* Cannot use remminafile here because is freed by remmina_file_manager_iterate */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">//if (remminafile)</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">//remmina_file_set_state_int (remminafile, "reachable", reachable);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  g_free (status);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#a6791ceb41e67708d546c3ee2c41c6d12"> 77</a></span> gchar *<a class="code" href="remmina__monitor_8c.html#a6791ceb41e67708d546c3ee2c41c6d12">remmina_monitor_can_reach</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *monitor)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> gchar *ssh_tunnel_server;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">const</span> gchar *addr_tostr = NULL;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  gchar *status = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  gchar *ssh_tunnel_host, *srv_host;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  gint netmonit, srv_port, ssh_tunnel_port;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">const</span> gchar *protocol;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  gint default_port = 0;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (!remminafile) {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  status = g_strdup (<span class="stringliteral">"I/O Error"</span>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  netmonit = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"enable-netmonit"</span>, FALSE);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span> (!netmonit) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  status = g_strdup (<span class="stringliteral">"Monitoring disabled"</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  protocol = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a> (remminafile, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (protocol && protocol[0] != <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  REMMINA_DEBUG (<span class="stringliteral">"Evaluating protocol %s for monitoring"</span>, protocol);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"RDP"</span>, protocol) == 0)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  default_port = 3389;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"VNC"</span>, protocol) == 0)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  default_port = 5900;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"GVNC"</span>, protocol) == 0)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  default_port = 5900;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SPICE"</span>, protocol) == 0)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  default_port = 5900;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"WWW"</span>, protocol) == 0)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  default_port = 443;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"X2GO"</span>, protocol) == 0)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  default_port = 22;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SSH"</span>, protocol) == 0)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  default_port = 22;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SFTP"</span>, protocol) == 0)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  default_port = 22;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"EXEC"</span>, protocol) == 0)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  default_port = -1;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (default_port == 0) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  status = g_strdup (<span class="stringliteral">"Unknown protocol"</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (default_port < 0) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  status = g_strdup (<span class="stringliteral">"Cannot monitor"</span>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  ssh_tunnel_server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, FALSE)) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(ssh_tunnel_server, 22, &ssh_tunnel_host, &ssh_tunnel_port);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a> = g_network_address_new (ssh_tunnel_host, ssh_tunnel_port);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  g_free(ssh_tunnel_host), ssh_tunnel_host = NULL;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, default_port, &srv_host, &srv_port);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a> = g_network_address_new (srv_host, srv_port);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  g_free(srv_host), srv_host = NULL;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  addr_tostr = g_strdup(g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  REMMINA_DEBUG (<span class="stringliteral">"addr is %s"</span>, addr_tostr);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> && netmonit) {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  REMMINA_DEBUG (<span class="stringliteral">"Testing for %s"</span>, addr_tostr);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  g_network_monitor_can_reach_async (</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a>,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  NULL,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  (GAsyncReadyCallback) <a class="code" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca">remmina_monitor_can_reach_cb</a>,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  monitor);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  status = (gchar *)g_hash_table_lookup (monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a>, addr_tostr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">//if (!status)</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">//g_hash_table_insert (monitor->server_status, g_strdup(addr_tostr), "offline");</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (!status) {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> g_strdup(addr_tostr);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">//g_free(ssh_tunnel_host), ssh_tunnel_host = NULL;</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">//g_free(srv_host), srv_host = NULL;</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">//g_free(dest), dest = NULL;</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#aa53b9aaa2e68e2116b714e52418de3aa"> 181</a></span> gboolean <a class="code" href="remmina__monitor_8c.html#acf79b91eb05694ec967d726bd0f85e50">remmina_network_monitor_status</a> (<a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *rm_monitor)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gboolean status = g_network_monitor_get_connectivity (rm_monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a>);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a> = g_hash_table_new_full(</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  g_str_hash,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  g_str_equal,</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  (GDestroyNotify)g_free,</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  (GDestroyNotify)g_free);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">switch</span> (status)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_LOCAL:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_LOCAL"</span>);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_LIMITED:</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_LIMITED"</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_PORTAL:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_PORTAL"</span>);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_FULL:</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_FULL"</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = TRUE;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#ac37c2579934e206d669c1af9b51f8ef1"> 220</a></span> <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *<a class="code" href="remmina__monitor_8c.html#ac37c2579934e206d669c1af9b51f8ef1">remmina_network_monitor_new</a> ()</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  rm_monitor = g_new0(<a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a>, 1);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a> = g_network_monitor_get_default ();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd">rm_monitor</a>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div><div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<a href="remmina__monitor_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#include "<a class="code" href="remmina__monitor_8h.html">remmina_monitor.h</a>"</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd"> 41</a></span> <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *<a class="code" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd">rm_monitor</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca"> 43</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca">remmina_monitor_can_reach_cb</a> (GNetworkMonitor *netmonitor, GAsyncResult *result, <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *monitor)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  g_autoptr (GError) error = NULL;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  gchar *status = NULL;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  gboolean is_reachable = g_network_monitor_can_reach_finish (netmonitor, result, &error);</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <span class="keyword">const</span> gchar *addr_tostr = g_strdup(g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">//gchar *value = (gchar *)g_hash_table_lookup (monitor->server_status, addr_tostr);</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (is_reachable) {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> </div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  REMMINA_DEBUG (<span class="stringliteral">"Network object %s is reachable"</span>, g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  status = g_strdup (<span class="stringliteral">"online"</span>);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  REMMINA_DEBUG (<span class="stringliteral">"Network object %s is not reachable"</span>, g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  status = g_strdup (<span class="stringliteral">"offline"</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">if</span> (g_hash_table_replace (monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a>, g_strdup(addr_tostr), g_strdup(status))) {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  REMMINA_DEBUG (<span class="stringliteral">"Inserting %s -> %s"</span>, addr_tostr, status);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  REMMINA_DEBUG (<span class="stringliteral">"Replacing %s -> %s"</span>, addr_tostr, status);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">/* Cannot use remminafile here because is freed by remmina_file_manager_iterate */</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="comment">//if (remminafile)</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">//remmina_file_set_state_int (remminafile, "reachable", reachable);</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  g_free (status);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#a6791ceb41e67708d546c3ee2c41c6d12"> 77</a></span> gchar *<a class="code" href="remmina__monitor_8c.html#a6791ceb41e67708d546c3ee2c41c6d12">remmina_monitor_can_reach</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *monitor)</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">const</span> gchar *server;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">const</span> gchar *ssh_tunnel_server;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">const</span> gchar *addr_tostr = NULL;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  gchar *status = NULL;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  gchar *ssh_tunnel_host, *srv_host;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  gint netmonit, srv_port, ssh_tunnel_port;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keyword">const</span> gchar *protocol;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  gint default_port = 0;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (!remminafile) {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  status = g_strdup (<span class="stringliteral">"I/O Error"</span>);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  netmonit = <a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"enable-netmonit"</span>, FALSE);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">if</span> (!netmonit) {</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  status = g_strdup (<span class="stringliteral">"Monitoring disabled"</span>);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> </div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  protocol = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a> (remminafile, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">if</span> (protocol && protocol[0] != <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  REMMINA_DEBUG (<span class="stringliteral">"Evaluating protocol %s for monitoring"</span>, protocol);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"RDP"</span>, protocol) == 0)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  default_port = 3389;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"VNC"</span>, protocol) == 0)</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  default_port = 5900;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"GVNC"</span>, protocol) == 0)</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  default_port = 5900;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SPICE"</span>, protocol) == 0)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  default_port = 5900;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"WWW"</span>, protocol) == 0)</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  default_port = 443;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"X2GO"</span>, protocol) == 0)</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  default_port = 22;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SSH"</span>, protocol) == 0)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  default_port = 22;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"SFTP"</span>, protocol) == 0)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  default_port = 22;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (g_strcmp0(<span class="stringliteral">"EXEC"</span>, protocol) == 0)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  default_port = -1;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span> (default_port == 0) {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  status = g_strdup (<span class="stringliteral">"Unknown protocol"</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (default_port < 0) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  status = g_strdup (<span class="stringliteral">"Cannot monitor"</span>);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  REMMINA_DEBUG (status);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> NULL;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  ssh_tunnel_server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"ssh_tunnel_server"</span>);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a>(remminafile, <span class="stringliteral">"ssh_tunnel_enabled"</span>, FALSE)) {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(ssh_tunnel_server, 22, &ssh_tunnel_host, &ssh_tunnel_port);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a> = g_network_address_new (ssh_tunnel_host, ssh_tunnel_port);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  g_free(ssh_tunnel_host), ssh_tunnel_host = NULL;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  server = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"server"</span>);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a>(server, default_port, &srv_host, &srv_port);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a> = g_network_address_new (srv_host, srv_port);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  g_free(srv_host), srv_host = NULL;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  addr_tostr = g_strdup(g_socket_connectable_to_string (monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>));</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  REMMINA_DEBUG (<span class="stringliteral">"addr is %s"</span>, addr_tostr);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> && netmonit) {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  REMMINA_DEBUG (<span class="stringliteral">"Testing for %s"</span>, addr_tostr);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  g_network_monitor_can_reach_async (</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a>,</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  monitor-><a class="code" href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">addr</a>,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  NULL,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  (GAsyncReadyCallback) <a class="code" href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca">remmina_monitor_can_reach_cb</a>,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  monitor);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  status = (gchar *)g_hash_table_lookup (monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a>, addr_tostr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">//if (!status)</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="comment">//g_hash_table_insert (monitor->server_status, g_strdup(addr_tostr), "offline");</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">if</span> (!status) {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> g_strdup(addr_tostr);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="comment">//g_free(ssh_tunnel_host), ssh_tunnel_host = NULL;</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">//g_free(srv_host), srv_host = NULL;</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">//g_free(dest), dest = NULL;</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#aa53b9aaa2e68e2116b714e52418de3aa"> 181</a></span> gboolean <a class="code" href="remmina__monitor_8c.html#acf79b91eb05694ec967d726bd0f85e50">remmina_network_monitor_status</a> (<a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *rm_monitor)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gboolean status = g_network_monitor_get_connectivity (rm_monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a>);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">server_status</a> = g_hash_table_new_full(</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  g_str_hash,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  g_str_equal,</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  (GDestroyNotify)g_free,</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  (GDestroyNotify)g_free);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">switch</span> (status)</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_LOCAL:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_LOCAL"</span>);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_LIMITED:</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_LIMITED"</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_PORTAL:</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_PORTAL"</span>);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = FALSE;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">case</span> G_NETWORK_CONNECTIVITY_FULL:</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  REMMINA_DEBUG (<span class="stringliteral">"G_NETWORK_CONNECTIVITY_FULL"</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">connected</a> = TRUE;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> status;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="remmina__monitor_8h.html#ac37c2579934e206d669c1af9b51f8ef1"> 220</a></span> <a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a> *<a class="code" href="remmina__monitor_8c.html#ac37c2579934e206d669c1af9b51f8ef1">remmina_network_monitor_new</a> ()</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> {</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  rm_monitor = g_new0(<a class="code" href="struct___remmina_monitor.html">RemminaMonitor</a>, 1);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  rm_monitor-><a class="code" href="struct___remmina_monitor.html#a4fe2b4d1448a36e21ab114630bd1d105">netmonitor</a> = g_network_monitor_get_default ();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <a class="code" href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd">rm_monitor</a>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> }</div><div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> <div class="ttc" id="struct___remmina_monitor_html_abc732574457c248961a878dd0689dd3a"><div class="ttname"><a href="struct___remmina_monitor.html#abc732574457c248961a878dd0689dd3a">_RemminaMonitor::addr</a></div><div class="ttdeci">GSocketConnectable * addr</div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8h_source.html#l00046">remmina_monitor.h:46</a></div></div> <div class="ttc" id="struct___remmina_monitor_html"><div class="ttname"><a href="struct___remmina_monitor.html">_RemminaMonitor</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8h_source.html#l00043">remmina_monitor.h:43</a></div></div> @@ -98,7 +98,7 @@ $(document).ready(function(){initNavTree('remmina__monitor_8c_source.html','');} <div class="ttc" id="remmina__log_8h_html"><div class="ttname"><a href="remmina__log_8h.html">remmina_log.h</a></div></div> <div class="ttc" id="remmina__monitor_8c_html_ab433d36e6c15de79e0152e2f6ce895ca"><div class="ttname"><a href="remmina__monitor_8c.html#ab433d36e6c15de79e0152e2f6ce895ca">remmina_monitor_can_reach_cb</a></div><div class="ttdeci">static void remmina_monitor_can_reach_cb(GNetworkMonitor *netmonitor, GAsyncResult *result, RemminaMonitor *monitor)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8c_source.html#l00043">remmina_monitor.c:43</a></div></div> <div class="ttc" id="remmina__monitor_8h_html"><div class="ttname"><a href="remmina__monitor_8h.html">remmina_monitor.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__monitor_8c_html_a6eae21e170328d883ef13f8f71401ffd"><div class="ttname"><a href="remmina__monitor_8c.html#a6eae21e170328d883ef13f8f71401ffd">rm_monitor</a></div><div class="ttdeci">RemminaMonitor * rm_monitor</div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8c_source.html#l00041">remmina_monitor.c:41</a></div></div> <div class="ttc" id="struct___remmina_monitor_html_abfc4878dd55c3b590663ac530ea53be4"><div class="ttname"><a href="struct___remmina_monitor.html#abfc4878dd55c3b590663ac530ea53be4">_RemminaMonitor::server_status</a></div><div class="ttdeci">GHashTable * server_status</div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8h_source.html#l00048">remmina_monitor.h:48</a></div></div> <div class="ttc" id="struct___remmina_monitor_html_adaa8ac5463302ab18a45171b5e4618f1"><div class="ttname"><a href="struct___remmina_monitor.html#adaa8ac5463302ab18a45171b5e4618f1">_RemminaMonitor::connected</a></div><div class="ttdeci">gboolean connected</div><div class="ttdef"><b>Definition:</b> <a href="remmina__monitor_8h_source.html#l00045">remmina_monitor.h:45</a></div></div> diff --git a/public/remmina__mpchange_8c_source.html b/public/remmina__mpchange_8c_source.html index 44100a683..6812f3720 100644 --- a/public/remmina__mpchange_8c_source.html +++ b/public/remmina__mpchange_8c_source.html @@ -87,10 +87,10 @@ $(document).ready(function(){initNavTree('remmina__mpchange_8c_source.html',''); </div><!--header--> <div class="contents"> <a href="remmina__mpchange_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2009-2011 Vic Lee</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright (C) 2014-2015 Antenore Gatta, Fabio Castelli, Giovanni Panozzo</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> *</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> *</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment"> *</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="remmina__mpchange_8h.html">remmina_mpchange.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="remmina__file_8h.html">remmina_file.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="remmina__public_8h.html">remmina_public.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="remmina__main_8h.html">remmina_main.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#define GET_DIALOG_OBJECT(object_name) gtk_builder_get_object(bu, object_name)</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structmpchanger__params.html"> 52</a></span> <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> {</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742"> 53</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>; <span class="comment">// New username</span></div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c"> 54</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>; <span class="comment">// New domain</span></div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e"> 55</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a>; <span class="comment">// New password</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b"> 56</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659"> 57</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4"> 58</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6"> 59</a></span>  gchar *<a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#ace846a15a537aecd0de2a17a1203c809"> 61</a></span>  GtkEntry *<a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a>, *<a class="code" href="structmpchanger__params.html#ace846a15a537aecd0de2a17a1203c809">eUsername</a>, *<a class="code" href="structmpchanger__params.html#ae582e14f2f790ea6bfdf81d5920e51ed">eDomain</a>, *<a class="code" href="structmpchanger__params.html#adc26bfabbc7c02beb1df988801c7972d">ePassword1</a>, *<a class="code" href="structmpchanger__params.html#a5c5b14d537a1b0685027d50d2a4cf9be">ePassword2</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#ab46251204997d3d363681557f99e66ce"> 62</a></span>  GtkEntry *<a class="code" href="structmpchanger__params.html#ab46251204997d3d363681557f99e66ce">eGatewayUsername</a>, *<a class="code" href="structmpchanger__params.html#acd1ad765997b06feec54fa746d5b4d2b">eGatewayDomain</a>, *<a class="code" href="structmpchanger__params.html#a69c2b22c53164a73241573474071df6e">eGatewayPassword1</a>, *<a class="code" href="structmpchanger__params.html#a73f1024c68afe4f35bea5608188c52bc">eGatewayPassword2</a>;</div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73"> 63</a></span>  GtkListStore* <a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568"> 64</a></span>  GtkDialog* <a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a87576a4dfe04c11686cf574669331bb2"> 65</a></span>  GtkTreeView* <a class="code" href="structmpchanger__params.html#a87576a4dfe04c11686cf574669331bb2">table</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#aaccae78b49c585d0a4d34776152ae5a2"> 66</a></span>  GtkButton* <a class="code" href="structmpchanger__params.html#aaccae78b49c585d0a4d34776152ae5a2">btnDoChange</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#ac9c16b65f1d27a62e2622b79f1aaf7bd"> 67</a></span>  GtkLabel* <a class="code" href="structmpchanger__params.html#ac9c16b65f1d27a62e2622b79f1aaf7bd">statusLabel</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46"> 69</a></span>  GtkTreeIter <a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a44429b8b620590ed1e1e015af6191719"> 70</a></span>  <span class="keywordtype">int</span> <a class="code" href="structmpchanger__params.html#a44429b8b620590ed1e1e015af6191719">changed_passwords_count</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#a170ffe7965540ab152a4a95945482c87"> 71</a></span>  guint <a class="code" href="structmpchanger__params.html#a170ffe7965540ab152a4a95945482c87">sid</a>;</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918"> 72</a></span>  guint <a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">enum</span> {</div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a"> 76</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a">COL_F</a> = 0,</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa621a0fec1bcdb27626ca53cd7e8b8f24"> 77</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa621a0fec1bcdb27626ca53cd7e8b8f24">COL_NAME</a>,</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa0d7f93239dde2b010c5117543a7efcbd"> 78</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa0d7f93239dde2b010c5117543a7efcbd">COL_GROUP</a>,</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa4c1dc9a16a3183553d83687506a5652e"> 79</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa4c1dc9a16a3183553d83687506a5652e">COL_USERNAME</a>,</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faaf0ccab08a5eb4b0cd87e7f659ef605d"> 80</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faaf0ccab08a5eb4b0cd87e7f659ef605d">COL_GATEWAY_USERNAME</a>,</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fadc0807f00f503edcc8e588a3894af0e3"> 81</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fadc0807f00f503edcc8e588a3894af0e3">COL_FILENAME</a>,</div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa8843686a2923021b5ded06faeaaf66f1"> 82</a></span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa8843686a2923021b5ded06faeaaf66f1">NUM_COLS</a></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> };</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131"> 85</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(<span class="keyword">const</span> gchar *needle, <span class="keyword">const</span> gchar *haystack, <span class="keywordtype">int</span> *matchcount)</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (needle[0] == 0) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  (*matchcount)++;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <span class="keywordflow">if</span> (strcasecmp(needle, haystack) != 0)</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  (*matchcount)++;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> TRUE;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a26ac0b33bd0b5ea718e16d04923b5ccd"> 102</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#a26ac0b33bd0b5ea718e16d04923b5ccd">remmina_mpchange_file_list_callback</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gpointer user_data)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  GtkListStore* <a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  GtkTreeIter <a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">int</span> matchcount;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>, *<a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>, *<a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>, *<a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>, *<a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  gchar* s;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  gchar* t;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>*)user_data;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  store = GTK_LIST_STORE(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  username = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"username"</span>);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  domain = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"domain"</span>);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  group = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"group"</span>);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  gatewayusername = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"gateway_username"</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  gatewaydomain = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"gateway_domain"</span>);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">if</span> (username == NULL)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  username = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">if</span> (domain == NULL)</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  domain = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (group == NULL)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  group = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (gatewayusername == NULL)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  gatewayusername = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">if</span> (gatewaydomain == NULL)</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  gatewaydomain = <span class="stringliteral">""</span>;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  matchcount = 0;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(mpcp-><a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>, username, &matchcount))</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(mpcp-><a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>, domain, &matchcount))</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>, group, &matchcount))</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(mpcp-><a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>, gatewayusername, &matchcount))</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina__mpchange_8c.html#a506370be386145eeb2c59829fe3e8131">remmina_mpchange_fieldcompare</a>(mpcp-><a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>, gatewaydomain, &matchcount))</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  gtk_list_store_append(store, &iter);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  s = g_strdup_printf(<span class="stringliteral">"%s\\%s"</span>, domain, username);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  t = g_strdup_printf(<span class="stringliteral">"%s\\%s"</span>, gatewaydomain, gatewayusername);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  gtk_list_store_set(store, &iter,</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a">COL_F</a>, matchcount >= 5 ? TRUE : FALSE,</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa621a0fec1bcdb27626ca53cd7e8b8f24">COL_NAME</a>, <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"name"</span>),</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa0d7f93239dde2b010c5117543a7efcbd">COL_GROUP</a>, group,</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa4c1dc9a16a3183553d83687506a5652e">COL_USERNAME</a>, s,</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faaf0ccab08a5eb4b0cd87e7f659ef605d">COL_GATEWAY_USERNAME</a>, t,</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fadc0807f00f503edcc8e588a3894af0e3">COL_FILENAME</a>, remminafile->filename,</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  -1);</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  g_free(s);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  g_free(t);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#aa872ba9de3be7ccd116881cee84c8b85"> 167</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#aa872ba9de3be7ccd116881cee84c8b85">remmina_mpchange_checkbox_toggle</a>(GtkCellRendererToggle *cell, gchar *path_string, gpointer user_data)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  GtkTreeIter <a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>*)user_data;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  GtkTreePath *path;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  gboolean a = gtk_cell_renderer_toggle_get_active(cell);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  path = gtk_tree_path_new_from_string(path_string);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  gtk_tree_model_get_iter(GTK_TREE_MODEL(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>), &iter, path);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  gtk_tree_path_free(path);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  gtk_list_store_set(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>, &iter, <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a">COL_F</a>, !a, -1);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a24d0569c79b289b5812c5c3019e5f4dd"> 181</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#a24d0569c79b289b5812c5c3019e5f4dd">remmina_mpchange_dochange</a>(gchar* fname, <span class="keyword">struct</span> <a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp)</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a>* remminafile;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  remminafile = <a class="code" href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a>(fname);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">if</span> (remminafile) {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">if</span>(mpcp-><a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a>[0] != 0){</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a>(remminafile, <span class="stringliteral">"password"</span>, mpcp-><a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span>(mpcp-><a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a>[0] != 0){</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a>(remminafile, <span class="stringliteral">"gateway_password"</span>, mpcp-><a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a>);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a>(remminafile);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  mpcp-><a class="code" href="structmpchanger__params.html#a44429b8b620590ed1e1e015af6191719">changed_passwords_count</a>++;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a909daa43f234a03b1ec12a58acc51b15"> 201</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#a909daa43f234a03b1ec12a58acc51b15">enable_inputs</a>(<span class="keyword">struct</span> <a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp, gboolean ena)</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a>), ena);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#ace846a15a537aecd0de2a17a1203c809">eUsername</a>), ena);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#ae582e14f2f790ea6bfdf81d5920e51ed">eDomain</a>), ena);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#adc26bfabbc7c02beb1df988801c7972d">ePassword1</a>), ena);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#a5c5b14d537a1b0685027d50d2a4cf9be">ePassword2</a>), ena);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#ab46251204997d3d363681557f99e66ce">eGatewayUsername</a>), ena);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#acd1ad765997b06feec54fa746d5b4d2b">eGatewayDomain</a>), ena);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#a69c2b22c53164a73241573474071df6e">eGatewayPassword1</a>), ena);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#a73f1024c68afe4f35bea5608188c52bc">eGatewayPassword2</a>), ena);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#aaccae78b49c585d0a4d34776152ae5a2">btnDoChange</a>), ena);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  gtk_widget_set_sensitive(GTK_WIDGET(mpcp-><a class="code" href="structmpchanger__params.html#a87576a4dfe04c11686cf574669331bb2">table</a>), ena);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#abea63e74b83d3545308d05dfe88e2839"> 216</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__mpchange_8c.html#abea63e74b83d3545308d05dfe88e2839">changenext</a>(gpointer user_data)</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> {</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>*)user_data;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  gchar* fname;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  gboolean sel;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  gtk_tree_model_get(GTK_TREE_MODEL(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>), &mpcp-><a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>, <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a">COL_F</a>, &sel, -1);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  gtk_tree_model_get(GTK_TREE_MODEL(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>), &mpcp-><a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>, <a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fadc0807f00f503edcc8e588a3894af0e3">COL_FILENAME</a>, &fname, -1);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (sel) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="remmina__mpchange_8c.html#a24d0569c79b289b5812c5c3019e5f4dd">remmina_mpchange_dochange</a>(fname, mpcp);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  g_free(fname);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span> (gtk_tree_model_iter_next(GTK_TREE_MODEL(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>), &mpcp-><a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>)) {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> G_SOURCE_CONTINUE;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  gtk_dialog_response(mpcp-><a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>, 1);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  mpcp-><a class="code" href="structmpchanger__params.html#a170ffe7965540ab152a4a95945482c87">sid</a> = 0;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">return</span> G_SOURCE_REMOVE;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a07d130893c0487bb873f2b6986e15a1b"> 239</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#a07d130893c0487bb873f2b6986e15a1b">remmina_mpchange_dochange_clicked</a>(GtkButton *btn, gpointer user_data)</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>* mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a>*)user_data;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> gchar *passwd1, *passwd2, *gatewaypasswd1, *gatewaypasswd2;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">if</span> (mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  g_source_remove(mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a> = 0;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">if</span> (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a>), &mpcp-><a class="code" href="structmpchanger__params.html#a3cb4141ca61b0b9a5584239386dbbe46">iter</a>))</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  passwd1 = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#adc26bfabbc7c02beb1df988801c7972d">ePassword1</a>);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  passwd2 = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#a5c5b14d537a1b0685027d50d2a4cf9be">ePassword2</a>);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">if</span> (g_strcmp0(passwd1, passwd2) != 0) {</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  GtkWidget *msgDialog;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp-><a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>),</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  GTK_DIALOG_DESTROY_WITH_PARENT,</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  GTK_MESSAGE_ERROR,</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  _(<span class="stringliteral">"The passwords do not match"</span>));</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  gtk_dialog_run(GTK_DIALOG(msgDialog));</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  gtk_widget_destroy(msgDialog);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  }</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  gatewaypasswd1 = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#a69c2b22c53164a73241573474071df6e">eGatewayPassword1</a>);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  gatewaypasswd2 = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#a73f1024c68afe4f35bea5608188c52bc">eGatewayPassword2</a>);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <span class="keywordflow">if</span> (g_strcmp0(gatewaypasswd1, gatewaypasswd2) != 0) {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  GtkWidget *msgDialog;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp-><a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>),</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  GTK_DIALOG_DESTROY_WITH_PARENT,</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  GTK_MESSAGE_ERROR,</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  GTK_BUTTONS_CLOSE,</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  _(<span class="stringliteral">"The Gateway passwords do not match"</span>));</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  gtk_dialog_run(GTK_DIALOG(msgDialog));</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  gtk_widget_destroy(msgDialog);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  mpcp-><a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a> = g_strdup(passwd1);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  mpcp-><a class="code" href="structmpchanger__params.html#a44429b8b620590ed1e1e015af6191719">changed_passwords_count</a> = 0;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  mpcp-><a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a> = g_strdup(gatewaypasswd1);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  mpcp-><a class="code" href="structmpchanger__params.html#a44429b8b620590ed1e1e015af6191719">changed_passwords_count</a> = 0;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  gtk_label_set_text(mpcp-><a class="code" href="structmpchanger__params.html#ac9c16b65f1d27a62e2622b79f1aaf7bd">statusLabel</a>, _(<span class="stringliteral">"Resetting passwords, please wait…"</span>));</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="remmina__mpchange_8c.html#a909daa43f234a03b1ec12a58acc51b15">enable_inputs</a>(mpcp, FALSE);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  mpcp-><a class="code" href="structmpchanger__params.html#a170ffe7965540ab152a4a95945482c87">sid</a> = g_idle_add(<a class="code" href="remmina__mpchange_8c.html#abea63e74b83d3545308d05dfe88e2839">changenext</a>, (gpointer)mpcp);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a4bf7e99626c40534641916848253f60f"> 296</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__mpchange_8c.html#a4bf7e99626c40534641916848253f60f">remmina_mpchange_searchfield_changed_to</a>(gpointer user_data)</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *)user_data;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">const</span> gchar *s;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>) {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  g_source_remove(mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a> = 0;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  s = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a> = g_strdup(s);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  s = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#ae582e14f2f790ea6bfdf81d5920e51ed">eDomain</a>);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  mpcp-><a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a> = g_strdup(s);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  s = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#ace846a15a537aecd0de2a17a1203c809">eUsername</a>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  mpcp-><a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a> = g_strdup(s);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  s = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#acd1ad765997b06feec54fa746d5b4d2b">eGatewayDomain</a>);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  mpcp-><a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a> = g_strdup(s);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  s = gtk_entry_get_text(mpcp-><a class="code" href="structmpchanger__params.html#ab46251204997d3d363681557f99e66ce">eGatewayUsername</a>);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  g_free(mpcp-><a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  mpcp-><a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a> = g_strdup(s);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span> </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">if</span> (mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a> != NULL) {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  gtk_tree_view_set_model(mpcp-><a class="code" href="structmpchanger__params.html#a87576a4dfe04c11686cf574669331bb2">table</a>, NULL);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  mpcp-><a class="code" href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">store</a> = gtk_list_store_new(<a class="code" href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181fa8843686a2923021b5ded06faeaaf66f1">NUM_COLS</a>, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <span class="keywordflow">if</span> (mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>[0] != 0 || mpcp-><a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>[0] != 0 || mpcp-><a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>[0] != 0 || mpcp-><a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>[0] != 0 || mpcp-><a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>[0] != 0)</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>((GFunc)<a class="code" href="remmina__mpchange_8c.html#a26ac0b33bd0b5ea718e16d04923b5ccd">remmina_mpchange_file_list_callback</a>, (gpointer)mpcp);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  gtk_tree_view_set_model(mpcp->table, GTK_TREE_MODEL(mpcp->store));</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> G_SOURCE_CONTINUE; <span class="comment">// Source already remove at the beginning</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f"> 341</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>(GtkSearchEntry *se, gpointer user_data)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *)user_data;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">if</span> (mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>) {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  g_source_remove(mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a>);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a> = 0;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  mpcp-><a class="code" href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">searchentrychange_timeout_source_id</a> = g_timeout_add(500, <a class="code" href="remmina__mpchange_8c.html#a4bf7e99626c40534641916848253f60f">remmina_mpchange_searchfield_changed_to</a>, user_data);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a1e4f5a537a13face058177dc97e88c8a"> 355</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__mpchange_8c.html#a1e4f5a537a13face058177dc97e88c8a">remmina_mpchange_stopsearch</a>(GtkSearchEntry *entry, gpointer user_data)</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> {</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">/* The stop-search signal is emitted when pressing Esc on a GtkSearchEntry. We end the dialog. */</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *mpcp = (<span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *)user_data;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  gtk_dialog_response(mpcp-><a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>, 1);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="remmina__mpchange_8c.html#a525273e9a7f849c9d072467d216762b2"> 363</a></span> <span class="keyword">static</span> gboolean <a class="code" href="remmina__mpchange_8c.html#a525273e9a7f849c9d072467d216762b2">remmina_file_multipasswd_changer_mt</a>(gpointer d)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *mpcp = d;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  GtkBuilder* bu;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  GtkDialog* <a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  GtkWindow* mainwindow;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  GtkCellRendererToggle *toggle;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordtype">char</span> *initerror;</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  mainwindow = <a class="code" href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a>();</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="comment">/* The multiple password changer works only when a secrecy plugin is available */</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  initerror = NULL;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">if</span> (secret_plugin == NULL) {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  initerror = _(<span class="stringliteral">"The multi password changer requires a secrecy plugin.\n"</span>);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">if</span> (!secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>(secret_plugin)) {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  initerror = _(<span class="stringliteral">"The multi password changer requires a secrecy service.\n"</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">if</span> (initerror) {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  GtkWidget *msgDialog;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  msgDialog = gtk_message_dialog_new(mainwindow, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="stringliteral">"%s"</span>, initerror);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  gtk_dialog_run(GTK_DIALOG(msgDialog));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  gtk_widget_destroy(msgDialog);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> </div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  bu = <a class="code" href="remmina__public_8c.html#a4573e086e1ff8507eb9447b25bf11b92">remmina_public_gtk_builder_new_from_resource</a>(<span class="stringliteral">"/org/remmina/Remmina/src/../data/ui/remmina_mpc.glade"</span>);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">if</span> (!bu) {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  REMMINA_DEBUG(<span class="stringliteral">"Unable to load the multiple password changer Glade file interface\n"</span>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  dialog = GTK_DIALOG(gtk_builder_get_object(bu, <span class="stringliteral">"MPCDialog"</span>));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  mpcp-><a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a> = <a class="code" href="structmpchanger__params.html#adf52357ac6f70f8bead49111deff9568">dialog</a>;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">if</span> (mainwindow)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  gtk_window_set_transient_for(GTK_WINDOW(dialog), mainwindow);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  mpcp-><a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a> = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"groupEntry"</span>));</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  gtk_entry_set_text(mpcp-><a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a>, mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  g_signal_connect(G_OBJECT(mpcp-><a class="code" href="structmpchanger__params.html#ab39b307ec320e66e34dd5b6a8c56d348">eGroup</a>), <span class="stringliteral">"changed"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>), (gpointer)mpcp);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  g_signal_connect(G_OBJECT(mpcp->eGroup), <span class="stringliteral">"stop-search"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#a1e4f5a537a13face058177dc97e88c8a">remmina_mpchange_stopsearch</a>), (gpointer)mpcp);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  mpcp->eUsername = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"usernameEntry"</span>));</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  gtk_entry_set_text(mpcp->eUsername, mpcp->username);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  g_signal_connect(G_OBJECT(mpcp->eUsername), <span class="stringliteral">"changed"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>), (gpointer)mpcp);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  mpcp->eGatewayUsername = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"gatewayUsernameEntry"</span>));</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  gtk_entry_set_text(mpcp->eGatewayUsername, mpcp->gatewayusername);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  g_signal_connect(G_OBJECT(mpcp->eGatewayUsername), <span class="stringliteral">"changed"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>), (gpointer)mpcp);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  mpcp->eDomain = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"domainEntry"</span>));</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  gtk_entry_set_text(mpcp->eDomain, mpcp->domain);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  g_signal_connect(G_OBJECT(mpcp->eDomain), <span class="stringliteral">"changed"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>), (gpointer)mpcp);</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> </div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  mpcp->eGatewayDomain = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"gatewayDomainEntry"</span>));</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  gtk_entry_set_text(mpcp->eGatewayDomain, mpcp->gatewaydomain);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  g_signal_connect(G_OBJECT(mpcp->eGatewayDomain), <span class="stringliteral">"changed"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>), (gpointer)mpcp);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  mpcp->ePassword1 = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"password1Entry"</span>));</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  gtk_entry_set_text(mpcp->ePassword1, mpcp->password);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  mpcp->eGatewayPassword1 = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"gatewayPassword1Entry"</span>));</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  gtk_entry_set_text(mpcp->eGatewayPassword1, mpcp->gatewaypassword);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  mpcp->ePassword2 = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"password2Entry"</span>));</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  gtk_entry_set_text(mpcp->ePassword2, mpcp->password);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  mpcp->eGatewayPassword2 = GTK_ENTRY(GET_DIALOG_OBJECT(<span class="stringliteral">"gatewayPassword2Entry"</span>));</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  gtk_entry_set_text(mpcp->eGatewayPassword2, mpcp->gatewaypassword);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  mpcp->statusLabel = GTK_LABEL(GET_DIALOG_OBJECT(<span class="stringliteral">"statusLabel"</span>));</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  </div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  mpcp->store = NULL;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  mpcp->table = GTK_TREE_VIEW(GET_DIALOG_OBJECT(<span class="stringliteral">"profchangelist"</span>));</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="comment">/* Fire a fake searchfield changed, so a new list store is created */</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="remmina__mpchange_8c.html#ad063ddefc518c67ed98f4b4bdf87fa8f">remmina_mpchange_searchfield_changed</a>(NULL, (gpointer)mpcp);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  toggle = GTK_CELL_RENDERER_TOGGLE(GET_DIALOG_OBJECT(<span class="stringliteral">"cellrenderertoggle1"</span>));</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  g_signal_connect(G_OBJECT(toggle), <span class="stringliteral">"toggled"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#aa872ba9de3be7ccd116881cee84c8b85">remmina_mpchange_checkbox_toggle</a>), (gpointer)mpcp);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> </div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  mpcp->btnDoChange = GTK_BUTTON(GET_DIALOG_OBJECT(<span class="stringliteral">"btnDoChange"</span>));</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  g_signal_connect(mpcp->btnDoChange, <span class="stringliteral">"clicked"</span>, G_CALLBACK(<a class="code" href="remmina__mpchange_8c.html#a07d130893c0487bb873f2b6986e15a1b">remmina_mpchange_dochange_clicked</a>), (gpointer)mpcp);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  gtk_dialog_run(dialog);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  gtk_widget_destroy(GTK_WIDGET(dialog));</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keywordflow">if</span> (mpcp->sid) {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  g_source_remove(mpcp->sid);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  mpcp->sid = 0;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">if</span> (mpcp->searchentrychange_timeout_source_id) {</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  g_source_remove(mpcp->searchentrychange_timeout_source_id);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  mpcp->searchentrychange_timeout_source_id = 0;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">if</span> (mpcp->changed_passwords_count) {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  GtkWidget *msgDialog;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  msgDialog = gtk_message_dialog_new(GTK_WINDOW(mpcp->dialog),</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  GTK_DIALOG_DESTROY_WITH_PARENT,</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  GTK_MESSAGE_INFO,</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  GTK_BUTTONS_OK,</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  ngettext(<span class="stringliteral">"%d password changed."</span>, <span class="stringliteral">"%d passwords changed."</span>, mpcp->changed_passwords_count), mpcp->changed_passwords_count);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  gtk_dialog_run(GTK_DIALOG(msgDialog));</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  gtk_widget_destroy(msgDialog);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="comment">// Free data</span></div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  g_free(mpcp->username);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  g_free(mpcp->password);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  g_free(mpcp->domain);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  g_free(mpcp->group);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  g_free(mpcp->gatewayusername);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  g_free(mpcp->gatewaypassword);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  g_free(mpcp->gatewaydomain);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  g_free(mpcp);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordflow">return</span> FALSE;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> </div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="remmina__mpchange_8h.html#ae4647d0f64efaaf6710d3e1b081c2d14"> 497</a></span> <a class="code" href="remmina__mpchange_8c.html#aa5a382490ca5e92bc4b124f66d83c4ff">remmina_mpchange_schedule</a>(gboolean has_domain, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a>, <span class="keyword">const</span> gchar *<a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a>)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="comment">// We could also be called in a subthread after a successful connection</span></div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="comment">// (not currently implemented)</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="comment">// So we just schedule the multipassword changer to be executed on</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="comment">// the main thread</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keyword">struct </span><a class="code" href="structmpchanger__params.html">mpchanger_params</a> *mpcp;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  mpcp = g_malloc0(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="structmpchanger__params.html">mpchanger_params</a>));</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  mpcp-><a class="code" href="structmpchanger__params.html#a634dd9d08486b2a435fba15119db6742">username</a> = g_strdup(username);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  mpcp-><a class="code" href="structmpchanger__params.html#a41f51745fc0e63d75d15fc80aaa4a29e">password</a> = g_strdup(password);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  mpcp-><a class="code" href="structmpchanger__params.html#a90af95c96a92c2aff1c2ab4be2e40f5c">domain</a> = g_strdup(domain);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  mpcp-><a class="code" href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">group</a> = g_strdup(group);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  mpcp-><a class="code" href="structmpchanger__params.html#a8e6ebba297a1eaf81a21e0b6d0483659">gatewayusername</a> = g_strdup(gatewayusername);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  mpcp-><a class="code" href="structmpchanger__params.html#a59187ffb045f62b334ff972331f960b6">gatewaypassword</a> = g_strdup(gatewaypassword);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  mpcp-><a class="code" href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">gatewaydomain</a> = g_strdup(gatewaydomain);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  gdk_threads_add_idle(<a class="code" href="remmina__mpchange_8c.html#a525273e9a7f849c9d072467d216762b2">remmina_file_multipasswd_changer_mt</a>, (gpointer)mpcp);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span> </div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div><div class="ttc" id="structmpchanger__params_html_aaccae78b49c585d0a4d34776152ae5a2"><div class="ttname"><a href="structmpchanger__params.html#aaccae78b49c585d0a4d34776152ae5a2">mpchanger_params::btnDoChange</a></div><div class="ttdeci">GtkButton * btnDoChange</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00066">remmina_mpchange.c:66</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00346">remmina_file.c:346</a></div></div> -<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00700">remmina_file.c:700</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ac1cc2d7f827f7d64c7fd3edf10e9383e"><div class="ttname"><a href="remmina__file_8c.html#ac1cc2d7f827f7d64c7fd3edf10e9383e">remmina_file_load</a></div><div class="ttdeci">RemminaFile * remmina_file_load(const gchar *filename)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00350">remmina_file.c:350</a></div></div> +<div class="ttc" id="remmina__file_8c_html_abd2f06bf0a5ddcf7156e5ef7d0c8d4d7"><div class="ttname"><a href="remmina__file_8c.html#abd2f06bf0a5ddcf7156e5ef7d0c8d4d7">remmina_file_free</a></div><div class="ttdeci">void remmina_file_free(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00709">remmina_file.c:709</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="structmpchanger__params_html_ac8fdacd94418731904020ff679475918"><div class="ttname"><a href="structmpchanger__params.html#ac8fdacd94418731904020ff679475918">mpchanger_params::searchentrychange_timeout_source_id</a></div><div class="ttdeci">guint searchentrychange_timeout_source_id</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00072">remmina_mpchange.c:72</a></div></div> <div class="ttc" id="remmina__mpchange_8c_html_a1e4f5a537a13face058177dc97e88c8a"><div class="ttname"><a href="remmina__mpchange_8c.html#a1e4f5a537a13face058177dc97e88c8a">remmina_mpchange_stopsearch</a></div><div class="ttdeci">static void remmina_mpchange_stopsearch(GtkSearchEntry *entry, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00355">remmina_mpchange.c:355</a></div></div> <div class="ttc" id="remmina__main_8c_html_a7740488de65c0e642895cc9dfba07b6e"><div class="ttname"><a href="remmina__main_8c.html#a7740488de65c0e642895cc9dfba07b6e">remmina_main_get_window</a></div><div class="ttdeci">GtkWindow * remmina_main_get_window()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__main_8c_source.html#l01645">remmina_main.c:1645</a></div></div> @@ -132,7 +132,7 @@ $(document).ready(function(){initNavTree('remmina__mpchange_8c_source.html',''); <div class="ttc" id="structmpchanger__params_html_a098952d194a183d4a505aa065797864b"><div class="ttname"><a href="structmpchanger__params.html#a098952d194a183d4a505aa065797864b">mpchanger_params::group</a></div><div class="ttdeci">gchar * group</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00056">remmina_mpchange.c:56</a></div></div> <div class="ttc" id="remmina__mpchange_8c_html_a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a"><div class="ttname"><a href="remmina__mpchange_8c.html#a5d76b81b0ad4c19007a781d4edb8181faa19a4779198791797a93684c6db7733a">COL_F</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00076">remmina_mpchange.c:76</a></div></div> <div class="ttc" id="structmpchanger__params_html_a00a888f26c1609e064367bb5095c71f4"><div class="ttname"><a href="structmpchanger__params.html#a00a888f26c1609e064367bb5095c71f4">mpchanger_params::gatewaydomain</a></div><div class="ttdeci">gchar * gatewaydomain</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00058">remmina_mpchange.c:58</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00835">remmina_file.c:835</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a3be28ff7f5a9b44dc47f92b883a85ac5"><div class="ttname"><a href="remmina__file_8c.html#a3be28ff7f5a9b44dc47f92b883a85ac5">remmina_file_store_secret_plugin_password</a></div><div class="ttdeci">void remmina_file_store_secret_plugin_password(RemminaFile *remminafile, const gchar *key, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00844">remmina_file.c:844</a></div></div> <div class="ttc" id="structmpchanger__params_html_a3f0a338901d8e6195eb872b0f2098e73"><div class="ttname"><a href="structmpchanger__params.html#a3f0a338901d8e6195eb872b0f2098e73">mpchanger_params::store</a></div><div class="ttdeci">GtkListStore * store</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00063">remmina_mpchange.c:63</a></div></div> <div class="ttc" id="remmina__pref_8h_html"><div class="ttname"><a href="remmina__pref_8h.html">remmina_pref.h</a></div></div> <div class="ttc" id="remmina__mpchange_8c_html_a07d130893c0487bb873f2b6986e15a1b"><div class="ttname"><a href="remmina__mpchange_8c.html#a07d130893c0487bb873f2b6986e15a1b">remmina_mpchange_dochange_clicked</a></div><div class="ttdeci">static void remmina_mpchange_dochange_clicked(GtkButton *btn, gpointer user_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__mpchange_8c_source.html#l00239">remmina_mpchange.c:239</a></div></div> diff --git a/public/remmina__plugin__manager_8c_source.html b/public/remmina__plugin__manager_8c_source.html index bc1a0c380..f8b9a270b 100644 --- a/public/remmina__plugin__manager_8c_source.html +++ b/public/remmina__plugin__manager_8c_source.html @@ -96,7 +96,7 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="remmina__plugin__manager_8c_html_aef243c58b9e8c778232d5acb32c7729b"><div class="ttname"><a href="remmina__plugin__manager_8c.html#aef243c58b9e8c778232d5acb32c7729b">remmina_plugin_manager_is_encrypted_setting</a></div><div class="ttdeci">gboolean remmina_plugin_manager_is_encrypted_setting(RemminaProtocolPlugin *pp, const char *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00629">remmina_plugin_manager.c:629</a></div></div> <div class="ttc" id="remmina__pref_8c_html_a37cd589f00c94cb28eabb1bce4646d0b"><div class="ttname"><a href="remmina__pref_8c.html#a37cd589f00c94cb28eabb1bce4646d0b">remmina_pref_get_scale_quality</a></div><div class="ttdeci">gint remmina_pref_get_scale_quality(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01090">remmina_pref.c:1090</a></div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a8ef0523afadadc9984d53fb02ecc01ad"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a8ef0523afadadc9984d53fb02ecc01ad">remmina_protocol_widget_panel_hide</a></div><div class="ttdeci">void remmina_protocol_widget_panel_hide(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01995">remmina_protocol_widget.c:1995</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a7e75f54171749cfec5c0cbbb1095ed86"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a7e75f54171749cfec5c0cbbb1095ed86">htdestroy</a></div><div class="ttdeci">static void htdestroy(gpointer ht)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00080">remmina_plugin_manager.c:80</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a9d55210413d6a313478f81cf76ecf1b7"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a9d55210413d6a313478f81cf76ecf1b7">remmina_protocol_widget_start_direct_tunnel</a></div><div class="ttdeci">gchar * remmina_protocol_widget_start_direct_tunnel(RemminaProtocolWidget *gp, gint default_port, gboolean port_plus)</div><div class="ttdoc">Start an SSH tunnel if possible and return the host:port string. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01057">remmina_protocol_widget.c:1057</a></div></div> @@ -113,7 +113,7 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aa93a45ba624f83d17a6d8619933a54b3e"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa93a45ba624f83d17a6d8619933a54b3e">REMMINA_PLUGIN_TYPE_LANGUAGE_WRAPPER</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00053">plugin.h:53</a></div></div> <div class="ttc" id="struct___remmina_file_plugin_html"><div class="ttname"><a href="struct___remmina_file_plugin.html">_RemminaFilePlugin</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00100">plugin.h:100</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ab863cc1442a992adfa323bc77ab88504"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a></div><div class="ttdeci">void remmina_protocol_widget_save_cred(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01885">remmina_protocol_widget.c:1885</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_ac90d2ffe3909722ca3daedac28da76e5"><div class="ttname"><a href="remmina__plugin__manager_8c.html#ac90d2ffe3909722ca3daedac28da76e5">compare_secret_plugin_init_order</a></div><div class="ttdeci">static gint compare_secret_plugin_init_order(gconstpointer a, gconstpointer b)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00317">remmina_plugin_manager.c:317</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a9ed3110b7b030bccd0ff9ed70e86da2d"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a></div><div class="ttdeci">gboolean remmina_protocol_widget_get_savepassword(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01843">remmina_protocol_widget.c:1843</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a2067c19b160eb43bddda6c6c6e8d6045"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a2067c19b160eb43bddda6c6c6e8d6045">remmina_protocol_widget_gtkviewport</a></div><div class="ttdeci">GtkWidget * remmina_protocol_widget_gtkviewport(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l02082">remmina_protocol_widget.c:2082</a></div></div> @@ -133,7 +133,7 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ae76d06b6e313971e5f420dd6e7f4c5aa">REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00101">types.h:101</a></div></div> <div class="ttc" id="remmina__widget__pool_8h_html"><div class="ttname"><a href="remmina__widget__pool_8h.html">remmina_widget_pool.h</a></div></div> <div class="ttc" id="struct___remmina_secret_plugin_html_a0155c6684591e0dd843c7145792fef09"><div class="ttname"><a href="struct___remmina_secret_plugin.html#a0155c6684591e0dd843c7145792fef09">_RemminaSecretPlugin::init_order</a></div><div class="ttdeci">int init_order</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00141">plugin.h:141</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00542">remmina_file.c:542</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad514c2523ff0c919ddf535e3dbad9f3a"><div class="ttname"><a href="remmina__file_8c.html#ad514c2523ff0c919ddf535e3dbad9f3a">remmina_file_get_secret</a></div><div class="ttdeci">gchar * remmina_file_get_secret(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00551">remmina_file.c:551</a></div></div> <div class="ttc" id="remmina__pref_8c_html_a12e52ee4ab89912280605e36ee069267"><div class="ttname"><a href="remmina__pref_8c.html#a12e52ee4ab89912280605e36ee069267">remmina_pref_get_ssh_loglevel</a></div><div class="ttdeci">gint remmina_pref_get_ssh_loglevel(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8c_source.html#l01099">remmina_pref.c:1099</a></div></div> <div class="ttc" id="plugin_8h_html_aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24"><div class="ttname"><a href="plugin_8h.html#aaf53c620d115a4642130227cff4a624aa45e094c248384c12cdafd9d088e4aa24">REMMINA_PLUGIN_TYPE_PROTOCOL</a></div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00047">plugin.h:47</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html_afa1a3a21c504b386cecfb42d1c9e6bff"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#afa1a3a21c504b386cecfb42d1c9e6bff">_RemminaProtocolPlugin::features</a></div><div class="ttdeci">const RemminaProtocolFeature * features</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00077">plugin.h:77</a></div></div> @@ -182,7 +182,7 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="remmina__protocol__widget_8c_html_acf75fd4bac28a3d53da064b2905f23c1"><div class="ttname"><a href="remmina__protocol__widget_8c.html#acf75fd4bac28a3d53da064b2905f23c1">remmina_protocol_widget_panel_changed_certificate</a></div><div class="ttdeci">gint remmina_protocol_widget_panel_changed_certificate(RemminaProtocolWidget *gp, const gchar *subject, const gchar *issuer, const gchar *new_fingerprint, const gchar *old_fingerprint)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01791">remmina_protocol_widget.c:1791</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a1668951fd7067f2c405e001836855080"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a1668951fd7067f2c405e001836855080">remmina_plugin_manager_query_feature_by_type</a></div><div class="ttdeci">gboolean remmina_plugin_manager_query_feature_by_type(RemminaPluginType ptype, const gchar *name, RemminaProtocolFeatureType ftype)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00610">remmina_plugin_manager.c:610</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ab9632c73b32531b7bea976e10204670b"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ab9632c73b32531b7bea976e10204670b">remmina_protocol_widget_get_clientcert</a></div><div class="ttdeci">gchar * remmina_protocol_widget_get_clientcert(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01867">remmina_protocol_widget.c:1867</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a2551dd6f53480609596d2695040fba5d"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a2551dd6f53480609596d2695040fba5d">remmina_protocol_widget_unlock_dynres</a></div><div class="ttdeci">void remmina_protocol_widget_unlock_dynres(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00440">remmina_protocol_widget.c:440</a></div></div> <div class="ttc" id="struct___remmina_protocol_feature_html"><div class="ttname"><a href="struct___remmina_protocol_feature.html">_RemminaProtocolFeature</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00072">types.h:72</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a1ef27b953decb0c707ec9a18da47a38f"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a1ef27b953decb0c707ec9a18da47a38f">remmina_gtksocket_available</a></div><div class="ttdeci">gboolean remmina_gtksocket_available()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00153">remmina_plugin_manager.c:153</a></div></div> @@ -207,7 +207,7 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="remmina__protocol__widget_8c_html_a2830f756dfc3d735b57b0c5753c429e3"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a2830f756dfc3d735b57b0c5753c429e3">remmina_protocol_widget_is_closed</a></div><div class="ttdeci">gboolean remmina_protocol_widget_is_closed(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01465">remmina_protocol_widget.c:1465</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a08d312825fc0de9f9286279d99f763a1"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a08d312825fc0de9f9286279d99f763a1">remmina_protocol_widget_get_clientkey</a></div><div class="ttdeci">gchar * remmina_protocol_widget_get_clientkey(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01876">remmina_protocol_widget.c:1876</a></div></div> <div class="ttc" id="struct___remmina_file_plugin_html_a3ff85e56bf902817630aafea67e3e494"><div class="ttname"><a href="struct___remmina_file_plugin.html#a3ff85e56bf902817630aafea67e3e494">_RemminaFilePlugin::type</a></div><div class="ttdeci">RemminaPluginType type</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00101">plugin.h:101</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a172fa9cf2ce196c9846a3e47ea9036b4"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a172fa9cf2ce196c9846a3e47ea9036b4">remmina_protocol_widget_start_xport_tunnel</a></div><div class="ttdeci">gboolean remmina_protocol_widget_start_xport_tunnel(RemminaProtocolWidget *gp, RemminaXPortTunnelInitFunc init_func)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01297">remmina_protocol_widget.c:1297</a></div></div> <div class="ttc" id="struct___remmina_file_plugin_html_a5cbc050a2735ee5d896a110a25e91ca9"><div class="ttname"><a href="struct___remmina_file_plugin.html#a5cbc050a2735ee5d896a110a25e91ca9">_RemminaFilePlugin::import_test_func</a></div><div class="ttdeci">gboolean(* import_test_func)(struct _RemminaFilePlugin *instance, const gchar *from_file)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00107">plugin.h:107</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a3872c8656a8a3d5147bcc603471c1932"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a3872c8656a8a3d5147bcc603471c1932">remmina_plugin_manager_get_plugin</a></div><div class="ttdeci">RemminaPlugin * remmina_plugin_manager_get_plugin(RemminaPluginType type, const gchar *name)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00436">remmina_plugin_manager.c:436</a></div></div> @@ -226,12 +226,12 @@ $(document).ready(function(){initNavTree('remmina__plugin__manager_8c_source.htm <div class="ttc" id="remmina__protocol__widget_8c_html_a0b19dbe685e4465e7f06706270e120fa"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a0b19dbe685e4465e7f06706270e120fa">remmina_protocol_widget_set_expand</a></div><div class="ttdeci">void remmina_protocol_widget_set_expand(RemminaProtocolWidget *gp, gboolean expand)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01426">remmina_protocol_widget.c:1426</a></div></div> <div class="ttc" id="remmina__log_8c_html_ac7848510c1fe1990c992e28cd31af9d8"><div class="ttname"><a href="remmina__log_8c.html#ac7848510c1fe1990c992e28cd31af9d8">remmina_log_printf</a></div><div class="ttdeci">void remmina_log_printf(const gchar *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__log_8c_source.html#l00410">remmina_log.c:410</a></div></div> <div class="ttc" id="remmina__plugin__manager_8c_html_a3fdc160c477f9f5e1d881c0c054d4b07"><div class="ttname"><a href="remmina__plugin__manager_8c.html#a3fdc160c477f9f5e1d881c0c054d4b07">remmina_plugin_manager_show_for_each_stdout</a></div><div class="ttdeci">static gboolean remmina_plugin_manager_show_for_each_stdout(RemminaPlugin *plugin)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__plugin__manager_8c_source.html#l00485">remmina_plugin_manager.c:485</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a9bcd0d356c7215dc0f791c9744360705"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a9bcd0d356c7215dc0f791c9744360705">remmina_protocol_widget_send_keys_signals</a></div><div class="ttdeci">void remmina_protocol_widget_send_keys_signals(GtkWidget *widget, const guint *keyvals, int keyvals_length, GdkEventType action)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l02096">remmina_protocol_widget.c:2096</a></div></div> <div class="ttc" id="remmina__log_8c_html_aca8f826a273194e22f4467421af9b3aa"><div class="ttname"><a href="remmina__log_8c.html#aca8f826a273194e22f4467421af9b3aa">remmina_log_print</a></div><div class="ttdeci">void remmina_log_print(const gchar *text)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__log_8c_source.html#l00196">remmina_log.c:196</a></div></div> <div class="ttc" id="remmina__log_8c_html_ae439b5fb61045d22c9474b32d0158185"><div class="ttname"><a href="remmina__log_8c.html#ae439b5fb61045d22c9474b32d0158185">_remmina_message</a></div><div class="ttdeci">void _remmina_message(const gchar *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__log_8c_source.html#l00229">remmina_log.c:229</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350ad898beb6ae625dee1ae27de75f1ab4e3">REMMINA_PROTOCOL_SETTING_TYPE_END</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00098">types.h:98</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00967">remmina_file.c:967</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a503e53fe49430a5ed310c342c946c014"><div class="ttname"><a href="remmina__file_8c.html#a503e53fe49430a5ed310c342c946c014">remmina_file_unsave_passwords</a></div><div class="ttdeci">void remmina_file_unsave_passwords(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00976">remmina_file.c:976</a></div></div> <div class="ttc" id="remmina__protocol__widget_8h_html"><div class="ttname"><a href="remmina__protocol__widget_8h.html">remmina_protocol_widget.h</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a4a3a9ba7422fc302b0b412ac771c9953"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a4a3a9ba7422fc302b0b412ac771c9953">remmina_protocol_widget_chat_close</a></div><div class="ttdeci">void remmina_protocol_widget_chat_close(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l02023">remmina_protocol_widget.c:2023</a></div></div> <div class="ttc" id="remmina__public_8c_html_adc8b77823386e00e610527d6b0b61149"><div class="ttname"><a href="remmina__public_8c.html#adc8b77823386e00e610527d6b0b61149">remmina_public_get_server_port</a></div><div class="ttdeci">void remmina_public_get_server_port(const gchar *server, gint defaultport, gchar **host, gint *port)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00420">remmina_public.c:420</a></div></div> diff --git a/public/remmina__protocol__widget_8c_source.html b/public/remmina__protocol__widget_8c_source.html index 7b4a49be2..5b34ec8d4 100644 --- a/public/remmina__protocol__widget_8c_source.html +++ b/public/remmina__protocol__widget_8c_source.html @@ -104,7 +104,7 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht <div class="ttc" id="remmina__protocol__widget_8c_html_a91d88c61dd84299369fe3c79e19821b1"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a91d88c61dd84299369fe3c79e19821b1">RemminaProtocolWidgetSignalData</a></div><div class="ttdeci">struct _RemminaProtocolWidgetSignalData RemminaProtocolWidgetSignalData</div></div> <div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ab2b4a7c615a472ad391d1c06ea1f00cc"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ab2b4a7c615a472ad391d1c06ea1f00cc">lock_dynres</a></div><div class="ttdeci">static gboolean lock_dynres(gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00415">remmina_protocol_widget.c:415</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a8ef0523afadadc9984d53fb02ecc01ad"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a8ef0523afadadc9984d53fb02ecc01ad">remmina_protocol_widget_panel_hide</a></div><div class="ttdeci">void remmina_protocol_widget_panel_hide(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01995">remmina_protocol_widget.c:1995</a></div></div> <div class="ttc" id="remmina__message__panel_8h_html_aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7"><div class="ttname"><a href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a10531307d859706670fb6ce4aa7308c7">REMMINA_MESSAGE_PANEL_CACERTFILE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__message__panel_8h_source.html#l00059">remmina_message_panel.h:59</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_add3775989fb5ed7a7f1f7c9b5980a94e"><div class="ttname"><a href="remmina__protocol__widget_8c.html#add3775989fb5ed7a7f1f7c9b5980a94e">unlock_dynres</a></div><div class="ttdeci">static gboolean unlock_dynres(gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00424">remmina_protocol_widget.c:424</a></div></div> @@ -130,7 +130,7 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht <div class="ttc" id="remmina__protocol__widget_8c_html_aebc7c7d34c470081a52aa35d998ce868"><div class="ttname"><a href="remmina__protocol__widget_8c.html#aebc7c7d34c470081a52aa35d998ce868">remmina_protocol_widget_panel_auth</a></div><div class="ttdeci">gint remmina_protocol_widget_panel_auth(RemminaProtocolWidget *gp, RemminaMessagePanelFlags pflags, const gchar *title, const gchar *default_username, const gchar *default_password, const gchar *default_domain, const gchar *password_prompt)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01689">remmina_protocol_widget.c:1689</a></div></div> <div class="ttc" id="struct___remmina_protocol_widget_signal_data_html_a2dfdc85f32d5eeed1d183088ac2a4ada"><div class="ttname"><a href="struct___remmina_protocol_widget_signal_data.html#a2dfdc85f32d5eeed1d183088ac2a4ada">_RemminaProtocolWidgetSignalData::signal_name</a></div><div class="ttdeci">const gchar * signal_name</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00123">remmina_protocol_widget.c:123</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_ab863cc1442a992adfa323bc77ab88504"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ab863cc1442a992adfa323bc77ab88504">remmina_protocol_widget_save_cred</a></div><div class="ttdeci">void remmina_protocol_widget_save_cred(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01885">remmina_protocol_widget.c:1885</a></div></div> -<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00206">remmina_file.c:206</a></div></div> +<div class="ttc" id="remmina__file_8c_html_ad1e4f3a0f64cd98e301044b6c38a1f1d"><div class="ttname"><a href="remmina__file_8c.html#ad1e4f3a0f64cd98e301044b6c38a1f1d">remmina_file_get_filename</a></div><div class="ttdeci">const gchar * remmina_file_get_filename(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00210">remmina_file.c:210</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_adfac12e7a563dc06fb2f0c8307f40fee"><div class="ttname"><a href="remmina__protocol__widget_8c.html#adfac12e7a563dc06fb2f0c8307f40fee">remmina_protocol_widget_xport_tunnel_connect_callback</a></div><div class="ttdeci">static gboolean remmina_protocol_widget_xport_tunnel_connect_callback(RemminaSSHTunnel *tunnel, gpointer data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01273">remmina_protocol_widget.c:1273</a></div></div> <div class="ttc" id="remmina__public_8c_html_a893f0cfe2d694ab700975f4f427ee2f6"><div class="ttname"><a href="remmina__public_8c.html#a893f0cfe2d694ab700975f4f427ee2f6">remmina_public_send_notification</a></div><div class="ttdeci">void remmina_public_send_notification(const gchar *notification_id, const gchar *notification_title, const gchar *notification_message)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__public_8c_source.html#l00637">remmina_public.c:637</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a9ed3110b7b030bccd0ff9ed70e86da2d"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a9ed3110b7b030bccd0ff9ed70e86da2d">remmina_protocol_widget_get_savepassword</a></div><div class="ttdeci">gboolean remmina_protocol_widget_get_savepassword(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01843">remmina_protocol_widget.c:1843</a></div></div> @@ -150,7 +150,7 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht <div class="ttc" id="remmina__protocol__widget_8c_html_ac1f95eb1e31c05ae0bc4027496ceafb0"><div class="ttname"><a href="remmina__protocol__widget_8c.html#ac1f95eb1e31c05ae0bc4027496ceafb0">remmina_protocol_widget_on_key_release</a></div><div class="ttdeci">static gboolean remmina_protocol_widget_on_key_release(GtkWidget *widget, GdkEventKey *event, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00843">remmina_protocol_widget.c:843</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a25797eafabe9d6f5729b56145abe1572"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a25797eafabe9d6f5729b56145abe1572">shutdown_loop</a></div><div class="ttdeci">static void shutdown_loop(MpRunInfo *mpri)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01576">remmina_protocol_widget.c:1576</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_tunnel_html_a33ae9b7cd8cb3dcd85223017dfd13795"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html#a33ae9b7cd8cb3dcd85223017dfd13795">_RemminaSSHTunnel::destroy_func_callback_data</a></div><div class="ttdeci">gpointer destroy_func_callback_data</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00181">remmina_ssh.h:181</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00888">remmina_file.c:888</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00897">remmina_file.c:897</a></div></div> <div class="ttc" id="rcw_8c_html_ad3c2fe67b137c757bd21b79ad5dcc5ff"><div class="ttname"><a href="rcw_8c.html#ad3c2fe67b137c757bd21b79ad5dcc5ff">rcw_open_from_file_full</a></div><div class="ttdeci">GtkWidget * rcw_open_from_file_full(RemminaFile *remminafile, GCallback disconnect_cb, gpointer data, guint *handler)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l04476">rcw.c:4476</a></div></div> <div class="ttc" id="remmina__message__panel_8c_html_ac10f450f856ca7d9c0b6896261e9c407"><div class="ttname"><a href="remmina__message__panel_8c.html#ac10f450f856ca7d9c0b6896261e9c407">remmina_message_panel_setup_auth_x509</a></div><div class="ttdeci">void remmina_message_panel_setup_auth_x509(RemminaMessagePanel *mp, RemminaMessagePanelCallback response_callback, gpointer response_callback_data)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__message__panel_8c_source.html#l00480">remmina_message_panel.c:480</a></div></div> <div class="ttc" id="struct___remmina_protocol_feature_html_a36b55faeba78528ac9708dfa66667e20"><div class="ttname"><a href="struct___remmina_protocol_feature.html#a36b55faeba78528ac9708dfa66667e20">_RemminaProtocolFeature::id</a></div><div class="ttdeci">gint id</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00074">types.h:74</a></div></div> @@ -319,7 +319,7 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht <div class="ttc" id="struct___remmina_protocol_widget_priv_html_aa37ce53d4329aaaa7c4059c60882a533"><div class="ttname"><a href="struct___remmina_protocol_widget_priv.html#aa37ce53d4329aaaa7c4059c60882a533">_RemminaProtocolWidgetPriv::scalemode</a></div><div class="ttdeci">RemminaScaleMode scalemode</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00067">remmina_protocol_widget.c:67</a></div></div> <div class="ttc" id="types_8h_html_a341a0a8b6509633809d99348cc3ba486a46ac68f2dea71082d090ae63c5c4505c"><div class="ttname"><a href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a46ac68f2dea71082d090ae63c5c4505c">REMMINA_MESSAGE_PANEL_FLAG_DOMAIN</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00158">types.h:158</a></div></div> <div class="ttc" id="remmina__message__panel_8h_html_aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3"><div class="ttname"><a href="remmina__message__panel_8h.html#aabfcbcb5ac86a1edac4035264bc7d2b8a34c1441f93d50321cbabcfb45918c6e3">REMMINA_MESSAGE_PANEL_CLIENTKEYFILE</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__message__panel_8h_source.html#l00062">remmina_message_panel.h:62</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a172fa9cf2ce196c9846a3e47ea9036b4"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a172fa9cf2ce196c9846a3e47ea9036b4">remmina_protocol_widget_start_xport_tunnel</a></div><div class="ttdeci">gboolean remmina_protocol_widget_start_xport_tunnel(RemminaProtocolWidget *gp, RemminaXPortTunnelInitFunc init_func)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01297">remmina_protocol_widget.c:1297</a></div></div> <div class="ttc" id="struct___remmina_protocol_plugin_html_ae0dc6952f8015848cf97950fcc7d9997"><div class="ttname"><a href="struct___remmina_protocol_plugin.html#ae0dc6952f8015848cf97950fcc7d9997">_RemminaProtocolPlugin::map_event</a></div><div class="ttdeci">gboolean(* map_event)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00086">plugin.h:86</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a605b69a9aa4393024369cc5070488692"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a605b69a9aa4393024369cc5070488692">remmina_protocol_widget_call_feature_by_ref</a></div><div class="ttdeci">void remmina_protocol_widget_call_feature_by_ref(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00806">remmina_protocol_widget.c:806</a></div></div> @@ -357,9 +357,9 @@ $(document).ready(function(){initNavTree('remmina__protocol__widget_8c_source.ht <div class="ttc" id="types_8h_html_ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440"><div class="ttname"><a href="types_8h.html#ab0b29804e77812ca42752bf4f379a288ab774d380798d305b72f4301143d3f440">REMMINA_TYPEHINT_UNDEFINED</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00069">types.h:69</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a0b19dbe685e4465e7f06706270e120fa"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a0b19dbe685e4465e7f06706270e120fa">remmina_protocol_widget_set_expand</a></div><div class="ttdeci">void remmina_protocol_widget_set_expand(RemminaProtocolWidget *gp, gboolean expand)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l01426">remmina_protocol_widget.c:1426</a></div></div> <div class="ttc" id="remmina__message__panel_8c_html_a80bc2fcb39c236da739593c2134c73fa"><div class="ttname"><a href="remmina__message__panel_8c.html#a80bc2fcb39c236da739593c2134c73fa">remmina_message_panel_field_get_switch_state</a></div><div class="ttdeci">gboolean remmina_message_panel_field_get_switch_state(RemminaMessagePanel *mp, int entryid)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__message__panel_8c_source.html#l00739">remmina_message_panel.c:739</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="struct___remmina_protocol_widget_priv_html_a75d5f7d146f04132de722d0b7d09bb7d"><div class="ttname"><a href="struct___remmina_protocol_widget_priv.html#a75d5f7d146f04132de722d0b7d09bb7d">_RemminaProtocolWidgetPriv::has_error</a></div><div class="ttdeci">gboolean has_error</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00070">remmina_protocol_widget.c:70</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00719">remmina_file.c:719</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8c893a5deec9bc446bd89cc9973416c7"><div class="ttname"><a href="remmina__file_8c.html#a8c893a5deec9bc446bd89cc9973416c7">remmina_file_save</a></div><div class="ttdeci">void remmina_file_save(RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00728">remmina_file.c:728</a></div></div> <div class="ttc" id="remmina__protocol__widget_8c_html_a8c125f58aa4fac0e4c88f293e4d4dd74"><div class="ttname"><a href="remmina__protocol__widget_8c.html#a8c125f58aa4fac0e4c88f293e4d4dd74">remmina_protocol_widget_class_init</a></div><div class="ttdeci">static void remmina_protocol_widget_class_init(RemminaProtocolWidgetClass *klass)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00129">remmina_protocol_widget.c:129</a></div></div> <div class="ttc" id="rcw_8c_html_aee06df544a91184cba1fe77c6991065a"><div class="ttname"><a href="rcw_8c.html#aee06df544a91184cba1fe77c6991065a">rco_get_monitor_geometry</a></div><div class="ttdeci">void rco_get_monitor_geometry(RemminaConnectionObject *cnnobj, GdkRectangle *sz)</div><div class="ttdef"><b>Definition:</b> <a href="rcw_8c_source.html#l01005">rcw.c:1005</a></div></div> <div class="ttc" id="struct___remmina_protocol_widget_priv_html_ae76f074f8613e3f3b01c26eb3ce194f0"><div class="ttname"><a href="struct___remmina_protocol_widget_priv.html#ae76f074f8613e3f3b01c26eb3ce194f0">_RemminaProtocolWidgetPriv::clientkey</a></div><div class="ttdeci">gchar * clientkey</div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8c_source.html#l00100">remmina_protocol_widget.c:100</a></div></div> diff --git a/public/remmina__sftp__plugin_8c_source.html b/public/remmina__sftp__plugin_8c_source.html index 95e452274..c7be82e05 100644 --- a/public/remmina__sftp__plugin_8c_source.html +++ b/public/remmina__sftp__plugin_8c_source.html @@ -99,7 +99,7 @@ $(document).ready(function(){initNavTree('remmina__sftp__plugin_8c_source.html', <div class="ttc" id="struct___remmina_s_s_h_html_a3aaebd7f03b7d8601818fabc46b787ed"><div class="ttname"><a href="struct___remmina_s_s_h.html#a3aaebd7f03b7d8601818fabc46b787ed">_RemminaSSH::error</a></div><div class="ttdeci">gchar * error</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00080">remmina_ssh.h:80</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a8be3f210c609fde31f68e607c41de296">REMMINA_PROTOCOL_SETTING_TYPE_TEXT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00105">types.h:105</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00888">remmina_file.c:888</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00897">remmina_file.c:897</a></div></div> <div class="ttc" id="struct___remmina_s_f_t_p_html"><div class="ttname"><a href="struct___remmina_s_f_t_p.html">_RemminaSFTP</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00220">remmina_ssh.h:220</a></div></div> <div class="ttc" id="remmina__sftp__client_8h_html"><div class="ttname"><a href="remmina__sftp__client_8h.html">remmina_sftp_client.h</a></div></div> <div class="ttc" id="struct___remmina_plugin_service_html_abaf7f57e2336f6e5c257e9c30fedc047"><div class="ttname"><a href="struct___remmina_plugin_service.html#abaf7f57e2336f6e5c257e9c30fedc047">_RemminaPluginService::protocol_plugin_set_width</a></div><div class="ttdeci">void(* protocol_plugin_set_width)(RemminaProtocolWidget *gp, gint width)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00169">plugin.h:169</a></div></div> @@ -141,7 +141,7 @@ $(document).ready(function(){initNavTree('remmina__sftp__plugin_8c_source.html', <div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1ad56c3878c4a651b51fdb3d0e8b9cebd7">REMMINA_SSH_AUTH_RECONNECT</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00115">remmina_ssh.h:115</a></div></div> <div class="ttc" id="remmina__ftp__client_8c_html_a1ef77e687209d258ec576c31614ea60f"><div class="ttname"><a href="remmina__ftp__client_8c.html#a1ef77e687209d258ec576c31614ea60f">remmina_ftp_client_set_dir</a></div><div class="ttdeci">void remmina_ftp_client_set_dir(RemminaFTPClient *client, const gchar *dir)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ftp__client_8c_source.html#l01146">remmina_ftp_client.c:1146</a></div></div> <div class="ttc" id="remmina__sftp__plugin_8c_html_a999de1dbe291169ccc33dffa123a1315"><div class="ttname"><a href="remmina__sftp__plugin_8c.html#a999de1dbe291169ccc33dffa123a1315">remmina_sftp_basic_settings</a></div><div class="ttdeci">static const RemminaProtocolSetting remmina_sftp_basic_settings[]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__sftp__plugin_8c_source.html#l00349">remmina_sftp_plugin.c:349</a></div></div> -<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00576">remmina_file.c:576</a></div></div> +<div class="ttc" id="remmina__file_8c_html_af153b0d289ac93f6ecdaa15d5f3b9b8c"><div class="ttname"><a href="remmina__file_8c.html#af153b0d289ac93f6ecdaa15d5f3b9b8c">remmina_file_set_int</a></div><div class="ttdeci">void remmina_file_set_int(RemminaFile *remminafile, const gchar *setting, gint value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00585">remmina_file.c:585</a></div></div> <div class="ttc" id="struct___remmina_protocol_widget_html"><div class="ttname"><a href="struct___remmina_protocol_widget.html">_RemminaProtocolWidget</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__protocol__widget_8h_source.html#l00058">remmina_protocol_widget.h:58</a></div></div> <div class="ttc" id="types_8h_html_aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d"><div class="ttname"><a href="types_8h.html#aee1a3e130e6991978acd907b52204350a04da01eead7904a55d1c813950609b2d">REMMINA_PROTOCOL_SETTING_TYPE_SELECT</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00107">types.h:107</a></div></div> <div class="ttc" id="struct___remmina_protocol_feature_html"><div class="ttname"><a href="struct___remmina_protocol_feature.html">_RemminaProtocolFeature</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00072">types.h:72</a></div></div> diff --git a/public/remmina__ssh_8c_source.html b/public/remmina__ssh_8c_source.html index 4e837fa9d..59323bd8d 100644 --- a/public/remmina__ssh_8c_source.html +++ b/public/remmina__ssh_8c_source.html @@ -95,7 +95,7 @@ $(document).ready(function(){initNavTree('remmina__ssh_8c_source.html','');}); <div class="ttc" id="remmina__ssh_8h_html_acf69725720378340e1a51c87e7638a7f"><div class="ttname"><a href="remmina__ssh_8h.html#acf69725720378340e1a51c87e7638a7f">remmina_ssh_auth_gui</a></div><div class="ttdeci">enum remmina_ssh_auth_result remmina_ssh_auth_gui(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *remminafile)</div></div> <div class="ttc" id="struct___remmina_pref_html_aac4f34f297a653052752b571777bc001"><div class="ttname"><a href="struct___remmina_pref.html#aac4f34f297a653052752b571777bc001">_RemminaPref::ssh_loglevel</a></div><div class="ttdeci">gint ssh_loglevel</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00165">remmina_pref.h:165</a></div></div> <div class="ttc" id="structitem_html_adb779965c903bb950d429e90ebce3162"><div class="ttname"><a href="structitem.html#adb779965c903bb950d429e90ebce3162">item::fd_in</a></div><div class="ttdeci">gint fd_in</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8c_source.html#l00133">remmina_ssh.c:133</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_html_ac03e015f09baa46d4a9a118c606736af"><div class="ttname"><a href="struct___remmina_s_s_h.html#ac03e015f09baa46d4a9a118c606736af">_RemminaSSH::proxycommand</a></div><div class="ttdeci">gchar * proxycommand</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00076">remmina_ssh.h:76</a></div></div> <div class="ttc" id="remmina__ssh_8c_html_aa8aee72091b09cde34c0e0efadde719a"><div class="ttname"><a href="remmina__ssh_8c.html#aa8aee72091b09cde34c0e0efadde719a">remmina_ssh_auth_auto_pubkey</a></div><div class="ttdeci">static enum remmina_ssh_auth_result remmina_ssh_auth_auto_pubkey(RemminaSSH *ssh, RemminaProtocolWidget *gp, RemminaFile *remminafile)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8c_source.html#l00938">remmina_ssh.c:938</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_tunnel_html_af670e0b0960c3e71e9f0b8b797ef9c28"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html#af670e0b0960c3e71e9f0b8b797ef9c28">_RemminaSSHTunnel::remotedisplay</a></div><div class="ttdeci">gint remotedisplay</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00171">remmina_ssh.h:171</a></div></div> @@ -157,7 +157,7 @@ $(document).ready(function(){initNavTree('remmina__ssh_8c_source.html','');}); <div class="ttc" id="remmina__ssh_8h_html_a6815a78f65795cbc6795ca1c59e73102"><div class="ttname"><a href="remmina__ssh_8h.html#a6815a78f65795cbc6795ca1c59e73102">remmina_ssh_init_from_file</a></div><div class="ttdeci">gboolean remmina_ssh_init_from_file(RemminaSSH *ssh, RemminaFile *remminafile, gboolean is_tunnel)</div></div> <div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1">remmina_ssh_auth_result</a></div><div class="ttdeci">remmina_ssh_auth_result</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00107">remmina_ssh.h:107</a></div></div> <div class="ttc" id="remmina__log_8c_html_a96f5bb72acbdcbf8793b4a5f4a6132b5"><div class="ttname"><a href="remmina__log_8c.html#a96f5bb72acbdcbf8793b4a5f4a6132b5">remmina_log_running</a></div><div class="ttdeci">gboolean remmina_log_running(void)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__log_8c_source.html#l00161">remmina_log.c:161</a></div></div> -<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00552">remmina_file.c:552</a></div></div> +<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00561">remmina_file.c:561</a></div></div> <div class="ttc" id="remmina__ssh_8c_html_a72a58e416c4eeb9d17eaf76360ebee42"><div class="ttname"><a href="remmina__ssh_8c.html#a72a58e416c4eeb9d17eaf76360ebee42">remmina_ssh_identity_path</a></div><div class="ttdeci">gchar * remmina_ssh_identity_path(const gchar *id)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8c_source.html#l00618">remmina_ssh.c:618</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_html_aa064626a7fd528e7d8c1fc34d1bd8dfc"><div class="ttname"><a href="struct___remmina_s_s_h.html#aa064626a7fd528e7d8c1fc34d1bd8dfc">_RemminaSSH::port</a></div><div class="ttdeci">gint port</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00065">remmina_ssh.h:65</a></div></div> <div class="ttc" id="remmina__ssh_8h_html_a316f97b879e147ec52967344f6ad1d84"><div class="ttname"><a href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a></div><div class="ttdeci">void remmina_ssh_shell_free(RemminaSSHShell *shell)</div></div> @@ -212,7 +212,7 @@ $(document).ready(function(){initNavTree('remmina__ssh_8c_source.html','');}); <div class="ttc" id="struct___remmina_s_s_h_html_adedb385c39effff9c9dd5767250f8c89"><div class="ttname"><a href="struct___remmina_s_s_h.html#adedb385c39effff9c9dd5767250f8c89">_RemminaSSH::password</a></div><div class="ttdeci">gchar * password</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00068">remmina_ssh.h:68</a></div></div> <div class="ttc" id="remmina__ssh_8h_html_a1500d65d1f0751812f237c1cb4d15188"><div class="ttname"><a href="remmina__ssh_8h.html#a1500d65d1f0751812f237c1cb4d15188">remmina_sftp_new_from_ssh</a></div><div class="ttdeci">RemminaSFTP * remmina_sftp_new_from_ssh(RemminaSSH *ssh)</div></div> <div class="ttc" id="struct___remmina_s_s_h_tunnel_html_aa9ab1684349da8bfd6b84cc135c053b3"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html#aa9ab1684349da8bfd6b84cc135c053b3">_RemminaSSHTunnel::sockets</a></div><div class="ttdeci">gint * sockets</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00154">remmina_ssh.h:154</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="remmina__ssh_8c_html_a91225eab16154f145e4d3f30a011d13a"><div class="ttname"><a href="remmina__ssh_8c.html#a91225eab16154f145e4d3f30a011d13a">remmina_ssh_x11_connect_display</a></div><div class="ttdeci">static int remmina_ssh_x11_connect_display()</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8c_source.html#l00385">remmina_ssh.c:385</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_html_af9f34b088c5af320708cf02dfc45d59e"><div class="ttname"><a href="struct___remmina_s_s_h.html#af9f34b088c5af320708cf02dfc45d59e">_RemminaSSH::privkeyfile</a></div><div class="ttdeci">gchar * privkeyfile</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00069">remmina_ssh.h:69</a></div></div> <div class="ttc" id="types_8h_html_a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c"><div class="ttname"><a href="types_8h.html#a341a0a8b6509633809d99348cc3ba486a9b734c324722cf2982768feaeeb15c7c">REMMINA_MESSAGE_PANEL_FLAG_SAVEPASSWORD</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00159">types.h:159</a></div></div> @@ -235,7 +235,7 @@ $(document).ready(function(){initNavTree('remmina__ssh_8c_source.html','');}); <div class="ttc" id="remmina__ssh_8h_html_aeb20d31243a4d30e469a34fe01684e38"><div class="ttname"><a href="remmina__ssh_8h.html#aeb20d31243a4d30e469a34fe01684e38">remmina_ssh_tunnel_terminated</a></div><div class="ttdeci">gboolean remmina_ssh_tunnel_terminated(RemminaSSHTunnel *tunnel)</div></div> <div class="ttc" id="remmina__ssh_8h_html_a879c265f2e8050e4e72a061ab3747ee1af9e9ce1f259cc359c6e5eb0dbaa090da"><div class="ttname"><a href="remmina__ssh_8h.html#a879c265f2e8050e4e72a061ab3747ee1af9e9ce1f259cc359c6e5eb0dbaa090da">REMMINA_SSH_AUTH_NULL</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00108">remmina_ssh.h:108</a></div></div> <div class="ttc" id="struct___remmina_s_s_h_tunnel_html_abb17dc2972e189660c20eff7ec0fe513"><div class="ttname"><a href="struct___remmina_s_s_h_tunnel.html#abb17dc2972e189660c20eff7ec0fe513">_RemminaSSHTunnel::num_channels</a></div><div class="ttdeci">gint num_channels</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00156">remmina_ssh.h:156</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00463">remmina_file.c:463</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a85ca1ca2d0bf9ef29e490c6f4527a954"><div class="ttname"><a href="remmina__file_8c.html#a85ca1ca2d0bf9ef29e490c6f4527a954">remmina_file_set_string</a></div><div class="ttdeci">void remmina_file_set_string(RemminaFile *remminafile, const gchar *setting, const gchar *value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00469">remmina_file.c:469</a></div></div> <div class="ttc" id="remmina__ssh_8h_html_aaaf171c31b73f06f1026239253d9f6b9"><div class="ttname"><a href="remmina__ssh_8h.html#aaaf171c31b73f06f1026239253d9f6b9">remmina_sftp_free</a></div><div class="ttdeci">void remmina_sftp_free(RemminaSFTP *sftp)</div></div> <div class="ttc" id="remmina__ssh_8h_html_a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14"><div class="ttname"><a href="remmina__ssh_8h.html#a77867ab4129f63159b37bca3b652a798a78cac65c66c1f72592488c7c5728ea14">REMMINA_SSH_TUNNEL_OPEN</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh_8h_source.html#l00142">remmina_ssh.h:142</a></div></div> <div class="ttc" id="remmina__ssh_8c_html_a1cffe594c5d4e018e846308a11c8d05f"><div class="ttname"><a href="remmina__ssh_8c.html#a1cffe594c5d4e018e846308a11c8d05f">node_t</a></div><div class="ttdeci">struct item node_t</div></div> diff --git a/public/remmina__ssh__plugin_8c_source.html b/public/remmina__ssh__plugin_8c_source.html index 452a80cb7..f06480803 100644 --- a/public/remmina__ssh__plugin_8c_source.html +++ b/public/remmina__ssh__plugin_8c_source.html @@ -114,7 +114,7 @@ $(document).ready(function(){initNavTree('remmina__ssh__plugin_8c_source.html',' <div class="ttc" id="remmina__ssh__plugin_8c_html_adbdcef549ad5b294357013e807c69240"><div class="ttname"><a href="remmina__ssh__plugin_8c.html#adbdcef549ad5b294357013e807c69240">remmina_plugin_ssh_vte_decrease_font</a></div><div class="ttdeci">void remmina_plugin_ssh_vte_decrease_font(GtkMenuItem *menuitem, gpointer vte)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00506">remmina_ssh_plugin.c:506</a></div></div> <div class="ttc" id="struct___remmina_color_pref_html"><div class="ttname"><a href="struct___remmina_color_pref.html">_RemminaColorPref</a></div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00105">remmina_pref.h:105</a></div></div> <div class="ttc" id="struct___remmina_color_pref_html_a2a14fc38e73351f9009fe155dd859808"><div class="ttname"><a href="struct___remmina_color_pref.html#a2a14fc38e73351f9009fe155dd859808">_RemminaColorPref::color0</a></div><div class="ttdeci">gchar * color0</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00114">remmina_pref.h:114</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00888">remmina_file.c:888</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a52a0986eaf54c9e606ce9cdf8bb57e60"><div class="ttname"><a href="remmina__file_8c.html#a52a0986eaf54c9e606ce9cdf8bb57e60">remmina_file_dup_temp_protocol</a></div><div class="ttdeci">RemminaFile * remmina_file_dup_temp_protocol(RemminaFile *remminafile, const gchar *new_protocol)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00897">remmina_file.c:897</a></div></div> <div class="ttc" id="struct___remmina_plugin_service_html_abaf7f57e2336f6e5c257e9c30fedc047"><div class="ttname"><a href="struct___remmina_plugin_service.html#abaf7f57e2336f6e5c257e9c30fedc047">_RemminaPluginService::protocol_plugin_set_width</a></div><div class="ttdeci">void(* protocol_plugin_set_width)(RemminaProtocolWidget *gp, gint width)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00169">plugin.h:169</a></div></div> <div class="ttc" id="struct___remmina_ssh_search_html_af30971fb9e025ca075cd2a4a857ad57c"><div class="ttname"><a href="struct___remmina_ssh_search.html#af30971fb9e025ca075cd2a4a857ad57c">_RemminaSshSearch::search_prev_button</a></div><div class="ttdeci">GtkWidget * search_prev_button</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00210">remmina_ssh_plugin.c:210</a></div></div> <div class="ttc" id="struct___remmina_color_pref_html_a4ad947d133d2aa2c94756aacb5031e79"><div class="ttname"><a href="struct___remmina_color_pref.html#a4ad947d133d2aa2c94756aacb5031e79">_RemminaColorPref::color14</a></div><div class="ttdeci">gchar * color14</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00128">remmina_pref.h:128</a></div></div> @@ -162,7 +162,7 @@ $(document).ready(function(){initNavTree('remmina__ssh__plugin_8c_source.html',' <div class="ttc" id="remmina__ssh__plugin_8c_html_a01bb81cfc23add39c9260e888ef1d88f"><div class="ttname"><a href="remmina__ssh__plugin_8c.html#a01bb81cfc23add39c9260e888ef1d88f">remmina_plugin_ssh_open_connection</a></div><div class="ttdeci">static gboolean remmina_plugin_ssh_open_connection(RemminaProtocolWidget *gp)</div><div class="ttdoc">Initialize the main window properties and the pthread. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l01287">remmina_ssh_plugin.c:1287</a></div></div> <div class="ttc" id="struct___remmina_plugin_service_html_ab212bed4baf8cba148fadb5773148ad6"><div class="ttname"><a href="struct___remmina_plugin_service.html#ab212bed4baf8cba148fadb5773148ad6">_RemminaPluginService::protocol_plugin_signal_connection_opened</a></div><div class="ttdeci">void(* protocol_plugin_signal_connection_opened)(RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="plugin_8h_source.html#l00186">plugin.h:186</a></div></div> <div class="ttc" id="types_8h_html_a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507"><div class="ttname"><a href="types_8h.html#a77ae46c4fd739dcd8e819fe9cdae27c5a645d9a32b55325b3672e265a64d0a507">REMMINA_PROTOCOL_FEATURE_TYPE_TOOL</a></div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00049">types.h:49</a></div></div> -<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00552">remmina_file.c:552</a></div></div> +<div class="ttc" id="remmina__file_8c_html_afd8b12f3d84b4e201b9f465d5b8e0d03"><div class="ttname"><a href="remmina__file_8c.html#afd8b12f3d84b4e201b9f465d5b8e0d03">remmina_file_format_properties</a></div><div class="ttdeci">gchar * remmina_file_format_properties(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00561">remmina_file.c:561</a></div></div> <div class="ttc" id="struct___remmina_color_pref_html_a5ae99dc78a80baa14e0407983077c500"><div class="ttname"><a href="struct___remmina_color_pref.html#a5ae99dc78a80baa14e0407983077c500">_RemminaColorPref::cursor</a></div><div class="ttdeci">gchar * cursor</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00108">remmina_pref.h:108</a></div></div> <div class="ttc" id="remmina__ssh__plugin_8c_html_ac54051cfe6fedf5d60160f2540917718"><div class="ttname"><a href="remmina__ssh__plugin_8c.html#ac54051cfe6fedf5d60160f2540917718">remmina_plugin_ssh_on_size_allocate</a></div><div class="ttdeci">static gboolean remmina_plugin_ssh_on_size_allocate(GtkWidget *widget, GtkAllocation *alloc, RemminaProtocolWidget *gp)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00448">remmina_ssh_plugin.c:448</a></div></div> <div class="ttc" id="remmina__ssh_8h_html_a316f97b879e147ec52967344f6ad1d84"><div class="ttname"><a href="remmina__ssh_8h.html#a316f97b879e147ec52967344f6ad1d84">remmina_ssh_shell_free</a></div><div class="ttdeci">void remmina_ssh_shell_free(RemminaSSHShell *shell)</div></div> @@ -227,7 +227,7 @@ $(document).ready(function(){initNavTree('remmina__ssh__plugin_8c_source.html',' <div class="ttc" id="struct___remmina_ssh_search_html_ab9a8a6aebee01778f250adf601ed385c"><div class="ttname"><a href="struct___remmina_ssh_search.html#ab9a8a6aebee01778f250adf601ed385c">_RemminaSshSearch::parent</a></div><div class="ttdeci">GtkWidget * parent</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00205">remmina_ssh_plugin.c:205</a></div></div> <div class="ttc" id="struct___remmina_pref_html_af9c8b60418a9dc795230e4ebb084f850"><div class="ttname"><a href="struct___remmina_pref.html#af9c8b60418a9dc795230e4ebb084f850">_RemminaPref::vte_lines</a></div><div class="ttdeci">gint vte_lines</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00201">remmina_pref.h:201</a></div></div> <div class="ttc" id="remmina__ssh__plugin_8c_html_a31cf1c896508adf4f8f43f70d8e8f599"><div class="ttname"><a href="remmina__ssh__plugin_8c.html#a31cf1c896508adf4f8f43f70d8e8f599">remmina_plugin_ssh_query_feature</a></div><div class="ttdeci">static gboolean remmina_plugin_ssh_query_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)</div><div class="ttdoc">Not used by the plugin. </div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l01313">remmina_ssh_plugin.c:1313</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00594">remmina_file.c:594</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a4884356c195dcfb4ceacf641a1e74e66"><div class="ttname"><a href="remmina__file_8c.html#a4884356c195dcfb4ceacf641a1e74e66">remmina_file_get_int</a></div><div class="ttdeci">gint remmina_file_get_int(RemminaFile *remminafile, const gchar *setting, gint default_value)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00603">remmina_file.c:603</a></div></div> <div class="ttc" id="struct___remmina_ssh_search_html_a9b72b310751ac148d5c55b0f2a04a300"><div class="ttname"><a href="struct___remmina_ssh_search.html#a9b72b310751ac148d5c55b0f2a04a300">_RemminaSshSearch::revealer</a></div><div class="ttdeci">GtkWidget * revealer</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00218">remmina_ssh_plugin.c:218</a></div></div> <div class="ttc" id="struct___remmina_color_pref_html_ab2b41853bdaaefa3968017819c19d316"><div class="ttname"><a href="struct___remmina_color_pref.html#ab2b41853bdaaefa3968017819c19d316">_RemminaColorPref::color3</a></div><div class="ttdeci">gchar * color3</div><div class="ttdef"><b>Definition:</b> <a href="remmina__pref_8h_source.html#l00117">remmina_pref.h:117</a></div></div> <div class="ttc" id="remmina__ssh__plugin_8c_html_a9cc4363a5dd981de398aca34155b38c0"><div class="ttname"><a href="remmina__ssh__plugin_8c.html#a9cc4363a5dd981de398aca34155b38c0">xterm_palette</a></div><div class="ttdeci">const GdkRGBA xterm_palette[PALETTE_SIZE]</div><div class="ttdef"><b>Definition:</b> <a href="remmina__ssh__plugin_8c_source.html#l00181">remmina_ssh_plugin.c:181</a></div></div> diff --git a/public/remmina__stats_8c_source.html b/public/remmina__stats_8c_source.html index 6ac2cb45e..7f0df968d 100644 --- a/public/remmina__stats_8c_source.html +++ b/public/remmina__stats_8c_source.html @@ -87,7 +87,7 @@ $(document).ready(function(){initNavTree('remmina__stats_8c_source.html','');}); </div><!--header--> <div class="contents"> <a href="remmina__stats_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Remmina - The GTK+ Remote Desktop Client</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> * Copyright (C) 2016-2022 Antenore Gatta, Giovanni Panozzo</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> *</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * This program is free software; you can redistribute it and/or modify</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * the Free Software Foundation; either version 2 of the License, or</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> * (at your option) any later version.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> *</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * GNU General Public License for more details.</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> * You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * along with this program; if not, write to the Free Software</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * Foundation, Inc., 51 Franklin Street, Fifth Floor,</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * Boston, MA 02110-1301, USA.</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> *</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * In addition, as a special exception, the copyright holders give</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * permission to link the code of portions of this program with the</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * OpenSSL library under certain conditions as described in each</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * individual source file, and distribute linked combinations</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * including the two.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * You must obey the GNU General Public License in all respects</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * for all of the code used other than OpenSSL. * If you modify</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * file(s) with this exception, you may extend this exception to your</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> * version of the file(s), but you are not obligated to do so. * If you</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment"> * do not wish to do so, delete this exception statement from your</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment"> * version. * If you delete this exception statement from all source</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment"> * files in the program, then also delete it here.</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment"> *</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#include "config.h"</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">#include <string.h></span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#include <sys/utsname.h></span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="preprocessor">#include <unistd.h></span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="preprocessor">#include <glib/gi18n.h></span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="preprocessor">#include <glib/gstdio.h></span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="preprocessor">#include <gtk/gtk.h></span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="preprocessor">#include "<a class="code" href="remmina_8h.html">remmina.h</a>"</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="preprocessor">#include "<a class="code" href="remmina__file_8h.html">remmina_file.h</a>"</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="preprocessor">#include "<a class="code" href="remmina__file__manager_8h.html">remmina_file_manager.h</a>"</span></div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="preprocessor">#include "<a class="code" href="remmina__icon_8h.html">remmina_icon.h</a>"</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="preprocessor">#include "<a class="code" href="remmina__log_8h.html">remmina_log.h</a>"</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="preprocessor">#include "<a class="code" href="remmina__pref_8h.html">remmina_pref.h</a>"</span></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="preprocessor">#include "<a class="code" href="remmina__sysinfo_8h.html">remmina_sysinfo.h</a>"</span></div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">#include "<a class="code" href="remmina__utils_8h.html">remmina_utils.h</a>"</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor">#include "<a class="code" href="remmina__trace__calls_8h.html">remmina/remmina_trace_calls.h</a>"</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">#include "<a class="code" href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a>"</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="preprocessor">#ifdef GDK_WINDOWING_WAYLAND</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor"> #include <gdk/gdkwayland.h></span></div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="preprocessor">#ifdef GDK_WINDOWING_X11</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="preprocessor"> #include <gdk/gdkx.h></span></div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="preprocessor">#include "<a class="code" href="remmina__stats_8h.html">remmina_stats.h</a>"</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="struct_profiles_data.html"> 164</a></span> <span class="keyword">struct </span><a class="code" href="struct_profiles_data.html">ProfilesData</a> {</div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef"> 165</a></span>  GHashTable *<a class="code" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef">proto_count</a>;</div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956"> 166</a></span>  GHashTable *<a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>;</div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a"> 167</a></span>  <span class="keyword">const</span> gchar *<a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>; </div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4"> 168</a></span>  <span class="keyword">const</span> gchar *<a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>; </div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#afc9e80a1835d8ec7e84ee74b82a0d680"> 169</a></span>  gint <a class="code" href="struct_profiles_data.html#afc9e80a1835d8ec7e84ee74b82a0d680">pcount</a>;</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="struct_profiles_data.html#a16267e0d71d796422278afdeba50c13b"> 170</a></span>  gchar <a class="code" href="struct_profiles_data.html#a16267e0d71d796422278afdeba50c13b">datestr</a>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> };</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a43133d5e00f481d315ef0d58cb52e70a"> 173</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a43133d5e00f481d315ef0d58cb52e70a">remmina_stats_get_os_info</a>()</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  JsonBuilder *b;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  JsonNode *r;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  gchar *kernel_name;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  gchar *kernel_release;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  gchar *kernel_arch;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  gchar *id;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  gchar *description;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  GHashTable *etc_release;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  gchar *release;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  gchar *codename;</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  GHashTableIter iter;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  gchar *key, *value;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  b = json_builder_new();</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  json_builder_set_member_name(b, <span class="stringliteral">"kernel_name"</span>);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  kernel_name = g_strdup_printf(<span class="stringliteral">"%s"</span>, <a class="code" href="remmina__utils_8c.html#abfc722d07d9936711794411bfbed0522">remmina_utils_get_kernel_name</a>());</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">if</span> (!kernel_name || kernel_name[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  json_builder_add_string_value(b, kernel_name);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  g_free(kernel_name);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  json_builder_set_member_name(b, <span class="stringliteral">"kernel_release"</span>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  kernel_release = g_strdup_printf(<span class="stringliteral">"%s"</span>, <a class="code" href="remmina__utils_8c.html#a57603aa88df56e77e1a6de0f215f21aa">remmina_utils_get_kernel_release</a>());</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">if</span> (!kernel_release || kernel_release[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  json_builder_add_string_value(b, kernel_release);</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  g_free(kernel_release);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  json_builder_set_member_name(b, <span class="stringliteral">"kernel_arch"</span>);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  kernel_arch = g_strdup_printf(<span class="stringliteral">"%s"</span>, <a class="code" href="remmina__utils_8c.html#a116e7cd4565386fe531d3a6d1a3d3730">remmina_utils_get_kernel_arch</a>());</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">if</span> (!kernel_arch || kernel_arch[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  json_builder_add_string_value(b, kernel_arch);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  g_free(kernel_arch);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  json_builder_set_member_name(b, <span class="stringliteral">"lsb_distributor"</span>);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">id</span> = <a class="code" href="remmina__utils_8c.html#aa768b6fe171695d212da4c6eaf74cf22">remmina_utils_get_lsb_id</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">if</span> (!<span class="keywordtype">id</span> || <span class="keywordtype">id</span>[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  json_builder_add_string_value(b, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  }</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  g_free(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  json_builder_set_member_name(b, <span class="stringliteral">"lsb_distro_description"</span>);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  description = <a class="code" href="remmina__utils_8c.html#ac00cb21c5cb5efcf7afc6eeae2147a75">remmina_utils_get_lsb_description</a>();</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (!description || description[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  json_builder_add_string_value(b, description);</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  g_free(description);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  json_builder_set_member_name(b, <span class="stringliteral">"lsb_distro_release"</span>);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  release = <a class="code" href="remmina__utils_8c.html#a5ee50df5d7585d229a154a712c9161ca">remmina_utils_get_lsb_release</a>();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">if</span> (!release || release[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  json_builder_add_string_value(b, release);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  g_free(release);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  json_builder_set_member_name(b, <span class="stringliteral">"lsb_distro_codename"</span>);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  codename = <a class="code" href="remmina__utils_8c.html#a2b4dbb0da7c8ba4bd86877097b85d10c">remmina_utils_get_lsb_codename</a>();</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">if</span> (!codename || codename[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  json_builder_add_string_value(b, codename);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  g_free(codename);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  etc_release = <a class="code" href="remmina__utils_8c.html#a54cee350c4ecc6e77af835c4ba90df4c">remmina_utils_get_etc_release</a>();</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  json_builder_set_member_name(b, <span class="stringliteral">"etc_release"</span>);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (etc_release) {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  g_hash_table_iter_init (&iter, etc_release);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next (&iter, (gpointer)&key, (gpointer)&value)) {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  json_builder_set_member_name(b, key);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  json_builder_add_string_value(b, value);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  json_builder_end_object(b);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  g_hash_table_remove_all(etc_release);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  g_hash_table_unref(etc_release);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  json_builder_add_null_value(b);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  json_builder_end_object(b);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  g_object_unref(b);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a42f0554bf8eacb253a023d601cd59648"> 291</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a42f0554bf8eacb253a023d601cd59648">remmina_stats_get_user_env</a>()</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> {</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  JsonBuilder *b;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  JsonNode *r;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  gchar *language;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> </div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  language = <a class="code" href="remmina__utils_8c.html#a0f10e190a6dd212fcb0cf36ce81c8324">remmina_utils_get_lang</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  b = json_builder_new();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  json_builder_set_member_name(b, <span class="stringliteral">"language"</span>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  json_builder_add_string_value(b, language);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  json_builder_end_object(b);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  g_object_unref(b);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#ab248458a3face2634bab909ffeb8291e"> 314</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#ab248458a3face2634bab909ffeb8291e">remmina_stats_get_version</a>()</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  JsonBuilder *b;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  JsonNode *r;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  gchar *flatpak_info;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  b = json_builder_new();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  json_builder_set_member_name(b, <span class="stringliteral">"version"</span>);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  json_builder_add_string_value(b, VERSION);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  json_builder_set_member_name(b, <span class="stringliteral">"git_revision"</span>);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  json_builder_add_string_value(b, REMMINA_GIT_REVISION);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  json_builder_set_member_name(b, <span class="stringliteral">"snap_build"</span>);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> <span class="preprocessor">#ifdef SNAP_BUILD</span></div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  json_builder_add_int_value(b, 1);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  json_builder_add_int_value(b, 0);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  json_builder_set_member_name(b, <span class="stringliteral">"flatpak_build"</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="comment">/* Flatpak sandbox should contain the file ${XDG_RUNTIME_DIR}/flatpak-info */</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  flatpak_info = g_build_filename(g_get_user_runtime_dir(), <span class="stringliteral">"flatpak-info"</span>, NULL);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keywordflow">if</span> (g_file_test(flatpak_info, G_FILE_TEST_EXISTS)) {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  json_builder_add_int_value(b, 1);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  json_builder_add_int_value(b, 0);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  g_free(flatpak_info);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  json_builder_end_object(b);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  g_object_unref(b);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#aed3a8dd3e01a05d96d6cf3625bb28731"> 356</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#aed3a8dd3e01a05d96d6cf3625bb28731">remmina_stats_get_gtk_version</a>()</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  JsonBuilder *b;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  JsonNode *r;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  b = json_builder_new();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  json_builder_set_member_name(b, <span class="stringliteral">"major"</span>);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  json_builder_add_int_value(b, gtk_get_major_version());</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  json_builder_set_member_name(b, <span class="stringliteral">"minor"</span>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  json_builder_add_int_value(b, gtk_get_minor_version());</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  json_builder_set_member_name(b, <span class="stringliteral">"micro"</span>);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  json_builder_add_int_value(b, gtk_get_micro_version());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  json_builder_end_object(b);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  g_object_unref(b);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> }</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div><div class="line"><a name="l00381"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a73fbf1064af209f1f7272d737168971c"> 381</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a73fbf1064af209f1f7272d737168971c">remmina_stats_get_gtk_backend</a>()</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  JsonNode *r;</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  GdkDisplay *disp;</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  gchar *bkend;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  disp = gdk_display_get_default();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="preprocessor">#ifdef GDK_WINDOWING_WAYLAND</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">if</span> (GDK_IS_WAYLAND_DISPLAY(disp)) {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  bkend = <span class="stringliteral">"Wayland"</span>;</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }<span class="keywordflow">else</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="preprocessor">#ifdef GDK_WINDOWING_X11</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">if</span> (GDK_IS_X11_DISPLAY(disp)) {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  bkend = <span class="stringliteral">"X11"</span>;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  } <span class="keywordflow">else</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  bkend = <span class="stringliteral">"n/a"</span>;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  r = json_node_alloc();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  json_node_init_string(r, bkend);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> </div><div class="line"><a name="l00413"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#ae596da7901fb3b45b7290a1d70b3ea3a"> 413</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#ae596da7901fb3b45b7290a1d70b3ea3a">remmina_stats_get_wm_name</a>()</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> {</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  JsonBuilder *b;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  JsonNode *r;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  gchar *wmver;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  gchar *wmname;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  b = json_builder_new();</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  json_builder_set_member_name(b, <span class="stringliteral">"window_manager"</span>);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  wmver = <a class="code" href="remmina__sysinfo_8c.html#a79fd36823613c320001f0cdd2a97490f">remmina_sysinfo_get_gnome_shell_version</a>();</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (!wmver || wmver[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  REMMINA_DEBUG(<span class="stringliteral">"GNOME Shell not found"</span>);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  REMMINA_DEBUG(<span class="stringliteral">"GNOME Shell version: %s\n"</span>, wmver);</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  json_builder_add_string_value(b, <span class="stringliteral">"GNOME Shell"</span>);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  json_builder_set_member_name(b, <span class="stringliteral">"gnome_shell_ver"</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  json_builder_add_string_value(b, wmver);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <span class="keywordflow">goto</span> end;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  g_free(wmver);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  wmname = <a class="code" href="remmina__sysinfo_8c.html#ae4441d62bb4075d1618b5750fea064b4">remmina_sysinfo_get_wm_name</a>();</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">if</span> (!wmname || wmname[0] == <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  REMMINA_DEBUG(<span class="stringliteral">"Cannot determine the window manger name"</span>);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  json_builder_add_string_value(b, <span class="stringliteral">"n/a"</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  REMMINA_DEBUG(<span class="stringliteral">"Window manger names %s"</span>, wmname);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  json_builder_add_string_value(b, wmname);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  g_free(wmname);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  end:</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  json_builder_end_object(b);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  g_object_unref(b);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#aee2ea5acceb2fbc3aa4ff21d136c5734"> 457</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#aee2ea5acceb2fbc3aa4ff21d136c5734">remmina_stats_get_indicator</a>()</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  JsonBuilder *b;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  JsonNode *r;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  gboolean sni; </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  b = json_builder_new();</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  json_builder_set_member_name(b, <span class="stringliteral">"appindicator_supported"</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  sni = <a class="code" href="remmina__sysinfo_8c.html#ae6ecf91edb905f3b2b39e33e05325590">remmina_sysinfo_is_appindicator_available</a>();</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordflow">if</span> (sni) {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  json_builder_add_int_value(b, 1);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  json_builder_set_member_name(b, <span class="stringliteral">"appindicator_compiled"</span>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#ifdef HAVE_LIBAPPINDICATOR</span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  json_builder_add_int_value(b, 1);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  json_builder_add_int_value(b, 0);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  json_builder_add_int_value(b, 0);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  json_builder_set_member_name(b, <span class="stringliteral">"icon_is_active"</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__icon_8c.html#a42f087b679b43b8a1d36cd9e9781a8b6">remmina_icon_is_available</a>()) {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  json_builder_add_int_value(b, 1);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  json_builder_set_member_name(b, <span class="stringliteral">"appindicator_type"</span>);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> <span class="preprocessor">#ifdef HAVE_LIBAPPINDICATOR</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  json_builder_add_string_value(b, <span class="stringliteral">"AppIndicator on GtkStatusIcon/xembed"</span>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> </div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  json_builder_add_string_value(b, <span class="stringliteral">"Remmina icon on GtkStatusIcon/xembed"</span>);</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  json_builder_add_int_value(b, 0);</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  json_builder_end_object(b);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  g_object_unref(b);</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a1dff2b06d5acefc9bd2f25508ab45328"> 511</a></span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="remmina__stats_8c.html#a1dff2b06d5acefc9bd2f25508ab45328">remmina_profiles_get_data</a>(<a class="code" href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a> *remminafile, gpointer user_data)</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> {</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  gint count = 0;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  gpointer <a class="code" href="struct_profiles_data.html#afc9e80a1835d8ec7e84ee74b82a0d680">pcount</a>, kpo;</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  gpointer pdate;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  gchar *hday, *hmonth, *hyear;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  gchar *pday, *pmonth, *pyear;</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  GDateTime *prof_gdate; </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  GDateTime *pdata_gdate; </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keyword">struct </span><a class="code" href="struct_profiles_data.html">ProfilesData</a>* pdata;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  pdata = (<span class="keyword">struct </span><a class="code" href="struct_profiles_data.html">ProfilesData</a>*)user_data;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a> = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"protocol"</span>);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="comment">//pdata->pdatestr = remmina_file_get_string(remminafile, "last_success");</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">const</span> gchar *last_success = <a class="code" href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a>(remminafile, <span class="stringliteral">"last_success"</span>);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  g_debug(<span class="stringliteral">"%s date %s"</span>, pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>, last_success);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  prof_gdate = pdata_gdate = NULL;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">if</span> (last_success && last_success[0] != <span class="charliteral">'\0'</span> && strlen(last_success) >= 6) {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  pyear = g_strdup_printf(<span class="stringliteral">"%.4s"</span>, last_success);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  pmonth = g_strdup_printf(<span class="stringliteral">"%.2s"</span>, last_success + 4);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  pday = g_strdup_printf(<span class="stringliteral">"%.2s"</span>, last_success + 6);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  prof_gdate = g_date_time_new_local(</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  atoi(pyear),</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  atoi(pmonth),</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  atoi(pday), 0, 0, 0);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  g_free(pyear);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  g_free(pmonth);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  g_free(pday);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">if</span> (pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a> && pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>[0] != <span class="charliteral">'\0'</span>) {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <span class="keywordflow">if</span> (g_hash_table_lookup_extended(pdata-><a class="code" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef">proto_count</a>, pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>, &kpo, &pcount)) {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  count = GPOINTER_TO_INT(pcount) + 1;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  count = 1;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  g_hash_table_insert(pdata-><a class="code" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef">proto_count</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), GINT_TO_POINTER(count));</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef">proto_count</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), GINT_TO_POINTER(count));</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  pdate = NULL;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (g_hash_table_lookup_extended(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>, NULL, &pdate)) {</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  pdata_gdate = NULL;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">if</span> (pdate && strlen(pdate) >= 6) {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a> = g_strdup(pdate);</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  hyear = g_strdup_printf(<span class="stringliteral">"%.4s"</span>, (<span class="keywordtype">char</span>*)pdate);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  hmonth = g_strdup_printf(<span class="stringliteral">"%.2s"</span>, (<span class="keywordtype">char</span>*)pdate + 4);</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  hday = g_strdup_printf(<span class="stringliteral">"%.2s"</span>, (<span class="keywordtype">char</span>*)pdate + 6);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  pdata_gdate = g_date_time_new_local(</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  atoi(hyear),</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  atoi(hmonth),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  atoi(hday), 0, 0, 0);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  g_free(hyear);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  g_free(hmonth);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  g_free(hday);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> </div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (prof_gdate != NULL && pdata_gdate != NULL ) {</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  g_debug(<span class="stringliteral">"Comparing dates"</span>);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  gint res = g_date_time_compare( pdata_gdate, prof_gdate );</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">if</span> (res < 0 ) {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  g_debug(<span class="stringliteral">"hash date is less than profile date. Replacing date in the hashtable"</span>);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), g_strdup(last_success));</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  g_debug(<span class="stringliteral">"profile date is less than hash date. Replacing date in the hashtable"</span>);</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>));</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span> </div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">if</span> (prof_gdate == NULL && pdata_gdate != NULL) {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  g_debug(<span class="stringliteral">"prof_gdate is NULL, replacing date in the hashtable"</span>);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>));</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">if</span> (prof_gdate != NULL && pdata_gdate == NULL) {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  g_debug(<span class="stringliteral">"pdata_gdate is NULL, replacing date in the hashtable"</span>);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), g_strdup(last_success));</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">if</span> ((prof_gdate == NULL && pdata_gdate == NULL) && pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>) {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  g_debug(<span class="stringliteral">"All dates are NULL, replacing date in the hashtable"</span>);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), NULL);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  }</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">if</span> (pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>) {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>));</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  g_hash_table_replace(pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a>, g_strdup(pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>), NULL);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  }</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  g_debug(<span class="stringliteral">"pdata set to %s protocol with last_success to %s"</span>, pdata-><a class="code" href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">protocol</a>, pdata-><a class="code" href="struct_profiles_data.html#a1078e772be8dfc9aad54d3f14efd96c4">pdatestr</a>);</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">if</span> (pdata_gdate)</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  g_date_time_unref(pdata_gdate);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">if</span> (prof_gdate)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  g_date_time_unref(prof_gdate);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> }</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span> </div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a65500d6b5d93cc7e3fc3d72329ff3847"> 644</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a65500d6b5d93cc7e3fc3d72329ff3847">remmina_stats_get_profiles</a>()</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> {</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  JsonBuilder *b;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  JsonNode *r;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  gchar *s;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span> </div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  gint profiles_count;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  GHashTableIter pcountiter, pdateiter;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  gpointer pcountkey, pcountvalue;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  gpointer pdatekey, pdatevalue;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">struct </span><a class="code" href="struct_profiles_data.html">ProfilesData</a> *pdata;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  pdata = g_malloc0(<span class="keyword">sizeof</span>(<span class="keyword">struct</span> <a class="code" href="struct_profiles_data.html">ProfilesData</a>));</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  b = json_builder_new();</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> </div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  json_builder_set_member_name(b, <span class="stringliteral">"profile_count"</span>);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  pdata-><a class="code" href="struct_profiles_data.html#a010a740c75d19daf63572f87565ae956">proto_date</a> = g_hash_table_new_full(g_str_hash, g_str_equal,</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  (GDestroyNotify)g_free, (GDestroyNotify)g_free);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  pdata-><a class="code" href="struct_profiles_data.html#af82cb4649acce0ce21aefca9eb6430ef">proto_count</a> = g_hash_table_new_full(g_str_hash, g_str_equal,</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  (GDestroyNotify)g_free, NULL);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span> </div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  profiles_count = <a class="code" href="remmina__file__manager_8c.html#a55a717aafc046713380bd2c55f29165a">remmina_file_manager_iterate</a>(</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  (GFunc)<a class="code" href="remmina__stats_8c.html#a1dff2b06d5acefc9bd2f25508ab45328">remmina_profiles_get_data</a>,</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  (gpointer)pdata);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  g_debug(<span class="stringliteral">"Number of profiles: %d"</span>, profiles_count);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  json_builder_add_int_value(b, profiles_count);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  g_hash_table_iter_init(&pcountiter, pdata->proto_count);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&pcountiter, &pcountkey, &pcountvalue)) {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  json_builder_set_member_name(b, (gchar*)pcountkey);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  json_builder_add_int_value(b, GPOINTER_TO_INT(pcountvalue));</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  g_hash_table_iter_init(&pdateiter, pdata->proto_date);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">while</span> (g_hash_table_iter_next(&pdateiter, &pdatekey, &pdatevalue)) {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  s = g_strdup_printf(<span class="stringliteral">"DATE_%s"</span>, (gchar*)pdatekey);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  g_debug(<span class="stringliteral">"Protocol date label: %s"</span>, s);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  json_builder_set_member_name(b, s);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  g_free(s);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  json_builder_add_string_value(b, (gchar*)pdatevalue);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  g_debug(<span class="stringliteral">"Protocol date: %s"</span>, (gchar*)pdatevalue);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  }</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  json_builder_end_object(b);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  g_object_unref(b);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  g_hash_table_remove_all(pdata->proto_date);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  g_hash_table_unref(pdata->proto_date);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  g_hash_table_remove_all(pdata->proto_count);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  g_hash_table_unref(pdata->proto_count);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span> </div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  g_free(pdata);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span> </div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span> </div><div class="line"><a name="l00716"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#afe9ad8b63938e3486cf09ebbbe2e549c"> 716</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#afe9ad8b63938e3486cf09ebbbe2e549c">remmina_stats_get_secret_plugin</a>()</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> {</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  JsonBuilder *b;</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  JsonNode *r;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <a class="code" href="struct___remmina_secret_plugin.html">RemminaSecretPlugin</a> *secret_plugin;</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  secret_plugin = <a class="code" href="remmina__plugin__manager_8c.html#ad380a98f6624aa8c830015c8b428b7b4">remmina_plugin_manager_get_secret_plugin</a>();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  b = json_builder_new();</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> </div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">if</span> (secret_plugin && secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a2123e14795b104f5fe8d77a4b7847261">is_service_available</a>) {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  json_builder_set_member_name(b, <span class="stringliteral">"plugin_name"</span>);</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  json_builder_add_string_value(b, secret_plugin-><a class="code" href="struct___remmina_secret_plugin.html#a197b28d8b71ccb0c91ce8bf27690968a">name</a>);</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  }</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  json_builder_end_object(b);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  g_object_unref(b);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00745"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#af5a6dc18fe855a6c80fe1dea454ef4f6"> 745</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#af5a6dc18fe855a6c80fe1dea454ef4f6">remmina_stats_get_primary_password_status</a>()</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span> {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  JsonBuilder *b;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  JsonNode *r;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> </div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  b = json_builder_new();</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  json_builder_set_member_name(b, <span class="stringliteral">"primary_password_status"</span>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">if</span> (<a class="code" href="remmina__pref_8c.html#a9a8d02227eb703bccc3f9296a5d89d6f">remmina_pref_get_boolean</a>(<span class="stringliteral">"use_primary_password"</span>)) {</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  json_builder_add_string_value(b, <span class="stringliteral">"ON"</span>);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  json_builder_add_string_value(b, <span class="stringliteral">"OFF"</span>);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span> </div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  json_builder_end_object(b);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  g_object_unref(b);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="remmina__stats_8c.html#a56956b7db0c631121151b19b920176da"> 775</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a56956b7db0c631121151b19b920176da">remmina_stats_get_kiosk_mode</a>()</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> {</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  JsonBuilder *b;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  JsonNode *r;</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  b = json_builder_new();</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span> </div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  json_builder_set_member_name(b, <span class="stringliteral">"kiosk_status"</span>);</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (!<a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> && <a class="code" href="remmina_8c.html#ab4a9a67c5372ff07b71d0558679ab7ae">kioskmode</a> == FALSE) {</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  json_builder_add_string_value(b, <span class="stringliteral">"OFF"</span>);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }<span class="keywordflow">else</span> {</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  json_builder_add_string_value(b, <span class="stringliteral">"ON"</span>);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  json_builder_end_object(b);</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  r = json_builder_get_root(b);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  g_object_unref(b);</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> </div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordflow">return</span> r;</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span> }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div><div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="remmina__stats_8h.html#a7a1c9ab1abc1fdf78239d11b802843ae"> 806</a></span> JsonNode *<a class="code" href="remmina__stats_8c.html#a7398b36347e3621772776c466b565641">remmina_stats_get_all</a>()</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> {</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  TRACE_CALL(__func__);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  JsonBuilder *b;</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  JsonNode *n;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  b = json_builder_new();</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  json_builder_begin_object(b);</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  n = <a class="code" href="remmina__stats_8c.html#ab248458a3face2634bab909ffeb8291e">remmina_stats_get_version</a>();</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  json_builder_set_member_name(b, <span class="stringliteral">"REMMINAVERSION"</span>);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  n = <a class="code" href="remmina__stats_8c.html#a43133d5e00f481d315ef0d58cb52e70a">remmina_stats_get_os_info</a>();</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  json_builder_set_member_name(b, <span class="stringliteral">"SYSTEM"</span>);</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> </div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  n = <a class="code" href="remmina__stats_8c.html#a42f0554bf8eacb253a023d601cd59648">remmina_stats_get_user_env</a>();</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  json_builder_set_member_name(b, <span class="stringliteral">"ENVIRONMENT"</span>);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  n = <a class="code" href="remmina__stats_8c.html#aed3a8dd3e01a05d96d6cf3625bb28731">remmina_stats_get_gtk_version</a>();</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  json_builder_set_member_name(b, <span class="stringliteral">"GTKVERSION"</span>);</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  n = <a class="code" href="remmina__stats_8c.html#a73fbf1064af209f1f7272d737168971c">remmina_stats_get_gtk_backend</a>();</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  json_builder_set_member_name(b, <span class="stringliteral">"GTKBACKEND"</span>);</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  n = <a class="code" href="remmina__stats_8c.html#ae596da7901fb3b45b7290a1d70b3ea3a">remmina_stats_get_wm_name</a>();</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  json_builder_set_member_name(b, <span class="stringliteral">"WINDOWMANAGER"</span>);</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  n = <a class="code" href="remmina__stats_8c.html#aee2ea5acceb2fbc3aa4ff21d136c5734">remmina_stats_get_indicator</a>();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  json_builder_set_member_name(b, <span class="stringliteral">"APPINDICATOR"</span>);</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  n = <a class="code" href="remmina__stats_8c.html#a65500d6b5d93cc7e3fc3d72329ff3847">remmina_stats_get_profiles</a>();</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  json_builder_set_member_name(b, <span class="stringliteral">"PROFILES"</span>);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  n = <a class="code" href="remmina__stats_8c.html#afe9ad8b63938e3486cf09ebbbe2e549c">remmina_stats_get_secret_plugin</a>();</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  json_builder_set_member_name(b, <span class="stringliteral">"ACTIVESECRETPLUGIN"</span>);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  n = <a class="code" href="remmina__stats_8c.html#af5a6dc18fe855a6c80fe1dea454ef4f6">remmina_stats_get_primary_password_status</a>();</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  json_builder_set_member_name(b, <span class="stringliteral">"HASPRIMARYPASSWORD"</span>);</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  n = <a class="code" href="remmina__stats_8c.html#a56956b7db0c631121151b19b920176da">remmina_stats_get_kiosk_mode</a>();</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  json_builder_set_member_name(b, <span class="stringliteral">"KIOSK"</span>);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  json_builder_add_value(b, n);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  json_builder_end_object(b);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  n = json_builder_get_root(b);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  g_object_unref(b);</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">return</span> n;</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span> </div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span> }</div><div class="ttc" id="remmina__plugin__manager_8h_html"><div class="ttname"><a href="remmina__plugin__manager_8h.html">remmina_plugin_manager.h</a></div></div> -<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00507">remmina_file.c:507</a></div></div> +<div class="ttc" id="remmina__file_8c_html_a8eb1b213d9d08c6ad13683ce05f4355e"><div class="ttname"><a href="remmina__file_8c.html#a8eb1b213d9d08c6ad13683ce05f4355e">remmina_file_get_string</a></div><div class="ttdeci">const gchar * remmina_file_get_string(RemminaFile *remminafile, const gchar *setting)</div><div class="ttdef"><b>Definition:</b> <a href="remmina__file_8c_source.html#l00516">remmina_file.c:516</a></div></div> <div class="ttc" id="struct_profiles_data_html_a7d3134f43d61603be7b021e62305633a"><div class="ttname"><a href="struct_profiles_data.html#a7d3134f43d61603be7b021e62305633a">ProfilesData::protocol</a></div><div class="ttdeci">const gchar * protocol</div><div class="ttdef"><b>Definition:</b> <a href="remmina__stats_8c_source.html#l00167">remmina_stats.c:167</a></div></div> <div class="ttc" id="remmina__file__manager_8h_html"><div class="ttname"><a href="remmina__file__manager_8h.html">remmina_file_manager.h</a></div></div> <div class="ttc" id="types_8h_html_a112d7cc6c755209cabb68cf2a62ad515"><div class="ttname"><a href="types_8h.html#a112d7cc6c755209cabb68cf2a62ad515">RemminaFile</a></div><div class="ttdeci">typedefG_BEGIN_DECLS struct _RemminaFile RemminaFile</div><div class="ttdef"><b>Definition:</b> <a href="types_8h_source.html#l00044">types.h:44</a></div></div> |