diff options
author | Antenore Gatta <antenore@simbiosi.org> | 2019-12-13 19:00:35 +0300 |
---|---|---|
committer | Antenore Gatta <antenore@simbiosi.org> | 2019-12-13 19:00:35 +0300 |
commit | 40de87603555b96051ae38b911676266cd45050e (patch) | |
tree | be162e48396faf707a870d129b0724b8a7fd55dd /src | |
parent | d7585d883a58b7a5638926fb4ac30089734bf614 (diff) |
Remmina news modal
Diffstat (limited to 'src')
-rw-r--r-- | src/remmina_main.c | 46 | ||||
-rw-r--r-- | src/remmina_main.h | 1 | ||||
-rw-r--r-- | src/rmnews.c | 12 | ||||
-rw-r--r-- | src/rmnews.h | 1 |
4 files changed, 40 insertions, 20 deletions
diff --git a/src/remmina_main.c b/src/remmina_main.c index 77ce381b3..df35a0ce6 100644 --- a/src/remmina_main.c +++ b/src/remmina_main.c @@ -64,7 +64,7 @@ static RemminaMain *remminamain; -#define GET_OBJECT(object_name) gtk_builder_get_object(remminamain->builder, object_name) +#define RM_GET_OBJECT(object_name) gtk_builder_get_object(remminamain->builder, object_name) enum { PROTOCOL_COLUMN, @@ -89,6 +89,7 @@ const gchar *supported_mime_types[] = { static GActionEntry main_actions[] = { { "about", remmina_main_on_action_application_about, NULL, NULL, NULL }, + { "news", remmina_main_on_action_application_news, NULL, NULL, NULL }, { "default", remmina_main_on_action_application_default, NULL, NULL, NULL }, { "mpchange", remmina_main_on_action_application_mpchange, NULL, NULL, NULL }, { "plugins", remmina_main_on_action_application_plugins, NULL, NULL, NULL }, @@ -1031,6 +1032,14 @@ void remmina_main_on_action_application_about(GSimpleAction *action, GVariant *p remmina_about_open(remminamain->window); }; +void remmina_main_on_action_application_news(GSimpleAction *action, GVariant *param, gpointer data) +{ + TRACE_CALL(__func__); + remmina_pref.periodic_rmnews_last_get = 0; + remmina_pref.periodic_rmnews_get_count = 0; + remmina_pref_save(); +}; + static gboolean remmina_main_quickconnect(void) { TRACE_CALL(__func__); @@ -1226,7 +1235,7 @@ static void remmina_main_init(void) /* Honor global peferences Search Bar visibility */ if (remmina_pref.hide_searchbar) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(GET_OBJECT("search_toggle")), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(RM_GET_OBJECT("search_toggle")), FALSE); /* Add a GtkMenuItem to the Tools menu for each plugin of type REMMINA_PLUGIN_TYPE_TOOL */ remmina_plugin_manager_for_each_plugin(REMMINA_PLUGIN_TYPE_TOOL, remmina_main_add_tool_plugin, remminamain); @@ -1295,45 +1304,45 @@ GtkWidget* remmina_main_new(void) remminamain->priv = g_new0(RemminaMainPriv, 1); /* Assign UI widgets to the private members */ remminamain->builder = remmina_public_gtk_builder_new_from_file("remmina_main.glade"); - remminamain->window = GTK_WINDOW(GET_OBJECT("RemminaMain")); + remminamain->window = GTK_WINDOW(RM_GET_OBJECT("RemminaMain")); if (kioskmode && kioskmode == TRUE) { gtk_window_set_position(remminamain->window, GTK_WIN_POS_CENTER_ALWAYS); gtk_window_set_default_size(remminamain->window, 800, 400); gtk_window_set_resizable(remminamain->window, FALSE); } /* New Button */ - remminamain->button_new = GTK_BUTTON(GET_OBJECT("button_new")); + remminamain->button_new = GTK_BUTTON(RM_GET_OBJECT("button_new")); if (kioskmode && kioskmode == TRUE) gtk_widget_set_sensitive(GTK_WIDGET(remminamain->button_new), FALSE); /* Search bar */ - remminamain->search_toggle = GTK_TOGGLE_BUTTON(GET_OBJECT("search_toggle")); - remminamain->search_bar = GTK_SEARCH_BAR(GET_OBJECT("search_bar")); + remminamain->search_toggle = GTK_TOGGLE_BUTTON(RM_GET_OBJECT("search_toggle")); + remminamain->search_bar = GTK_SEARCH_BAR(RM_GET_OBJECT("search_bar")); /* view mode list/tree */ - remminamain->view_toggle_button = GTK_TOGGLE_BUTTON(GET_OBJECT("view_toggle_button")); + remminamain->view_toggle_button = GTK_TOGGLE_BUTTON(RM_GET_OBJECT("view_toggle_button")); if (kioskmode && kioskmode == TRUE) gtk_widget_set_sensitive(GTK_WIDGET(remminamain->view_toggle_button), FALSE); /* Menu widgets */ - remminamain->menu_popup = GTK_MENU(GET_OBJECT("menu_popup")); - remminamain->menu_header_button = GTK_MENU_BUTTON(GET_OBJECT("menu_header_button")); - remminamain->menu_popup_full = GTK_MENU(GET_OBJECT("menu_popup_full")); + remminamain->menu_popup = GTK_MENU(RM_GET_OBJECT("menu_popup")); + remminamain->menu_header_button = GTK_MENU_BUTTON(RM_GET_OBJECT("menu_header_button")); + remminamain->menu_popup_full = GTK_MENU(RM_GET_OBJECT("menu_popup_full")); if (kioskmode && kioskmode == TRUE) { gtk_widget_set_sensitive(GTK_WIDGET(remminamain->menu_popup_full), FALSE); gtk_widget_set_sensitive(GTK_WIDGET(remminamain->menu_header_button), FALSE); } /* View mode radios */ - remminamain->menuitem_view_mode_list = GTK_RADIO_MENU_ITEM(GET_OBJECT("menuitem_view_mode_list")); - remminamain->menuitem_view_mode_tree = GTK_RADIO_MENU_ITEM(GET_OBJECT("menuitem_view_mode_tree")); + remminamain->menuitem_view_mode_list = GTK_RADIO_MENU_ITEM(RM_GET_OBJECT("menuitem_view_mode_list")); + remminamain->menuitem_view_mode_tree = GTK_RADIO_MENU_ITEM(RM_GET_OBJECT("menuitem_view_mode_tree")); /* Quick connect objects */ - remminamain->box_quick_connect = GTK_BOX(GET_OBJECT("box_quick_connect")); - remminamain->combo_quick_connect_protocol = GTK_COMBO_BOX_TEXT(GET_OBJECT("combo_quick_connect_protocol")); + remminamain->box_quick_connect = GTK_BOX(RM_GET_OBJECT("box_quick_connect")); + remminamain->combo_quick_connect_protocol = GTK_COMBO_BOX_TEXT(RM_GET_OBJECT("combo_quick_connect_protocol")); if (kioskmode && kioskmode == TRUE) gtk_widget_set_sensitive(GTK_WIDGET(remminamain->combo_quick_connect_protocol), FALSE); - remminamain->entry_quick_connect_server = GTK_ENTRY(GET_OBJECT("entry_quick_connect_server")); + remminamain->entry_quick_connect_server = GTK_ENTRY(RM_GET_OBJECT("entry_quick_connect_server")); /* Other widgets */ - remminamain->tree_files_list = GTK_TREE_VIEW(GET_OBJECT("tree_files_list")); - remminamain->column_files_list_group = GTK_TREE_VIEW_COLUMN(GET_OBJECT("column_files_list_group")); - remminamain->statusbar_main = GTK_STATUSBAR(GET_OBJECT("statusbar_main")); + remminamain->tree_files_list = GTK_TREE_VIEW(RM_GET_OBJECT("tree_files_list")); + remminamain->column_files_list_group = GTK_TREE_VIEW_COLUMN(RM_GET_OBJECT("column_files_list_group")); + remminamain->statusbar_main = GTK_STATUSBAR(RM_GET_OBJECT("statusbar_main")); /* Non widget objects */ actions = g_simple_action_group_new(); g_action_map_add_action_entries(G_ACTION_MAP(actions), main_actions, G_N_ELEMENTS(main_actions), remminamain->window); @@ -1362,6 +1371,7 @@ GtkWindow* remmina_main_get_window() return NULL; if (!remminamain->priv->initialized) return NULL; + remminamain->window = GTK_WINDOW(RM_GET_OBJECT("RemminaMain")); return remminamain->window; } diff --git a/src/remmina_main.h b/src/remmina_main.h index 898f9dd0b..4112c2fac 100644 --- a/src/remmina_main.h +++ b/src/remmina_main.h @@ -105,6 +105,7 @@ void remmina_main_save_before_destroy(void); void remmina_main_show_warning_dialog(const gchar *message); void remmina_main_on_action_application_about(GSimpleAction *action, GVariant *param, gpointer data); +void remmina_main_on_action_application_news(GSimpleAction *action, GVariant *param, gpointer data); void remmina_main_on_action_application_default(GSimpleAction *action, GVariant *param, gpointer data); void remmina_main_on_action_application_mpchange(GSimpleAction *action, GVariant *param, gpointer data); void remmina_main_on_action_application_plugins(GSimpleAction *action, GVariant *param, gpointer data); diff --git a/src/rmnews.c b/src/rmnews.c index 825929494..17427b692 100644 --- a/src/rmnews.c +++ b/src/rmnews.c @@ -174,7 +174,7 @@ static gboolean rmnews_dialog_deleted(GtkButton *btn, gpointer user_data) return FALSE; } -static void rmnews_show_news(GtkWindow *parent) +void rmnews_show_news(GtkWindow *parent) { TRACE_CALL(__func__); @@ -216,13 +216,14 @@ static void rmnews_show_news(GtkWindow *parent) if (parent) gtk_window_set_transient_for(GTK_WINDOW(rmnews_news_dialog->dialog), parent); + gtk_window_set_modal (GTK_WINDOW(rmnews_news_dialog->dialog), TRUE); + /* Show the non-modal news dialog */ gtk_widget_show_all(GTK_WIDGET(rmnews_news_dialog->dialog)); gtk_window_present(GTK_WINDOW(rmnews_news_dialog->dialog)); } - static void rmnews_get_url_cb(SoupSession *session, SoupMessage *msg, gpointer data) { TRACE_CALL(__func__); @@ -424,6 +425,13 @@ void rmnews_get_news() g_info("Output file set to %s", output_file_path); + if (remmina_pref.periodic_rmnews_last_get == 0 && + remmina_pref.periodic_rmnews_get_count == 0) { + g_file_set_contents (output_file_path, "", 0, NULL); + /* Just a symolic date */ + remmina_pref.periodic_rmnews_last_get = 191469343000; + } + fd = g_open (output_file_path, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR); g_debug ("Returned %d while creating %s", fd, output_file_path); /* If we cannot create the remmina_news file, we avoid connections */ diff --git a/src/rmnews.h b/src/rmnews.h index 4dc1fe384..6f915695c 100644 --- a/src/rmnews.h +++ b/src/rmnews.h @@ -51,5 +51,6 @@ typedef struct _RemminaNewsDialog { G_BEGIN_DECLS void rmnews_schedule(); +void rmnews_show_news(); void rmnews_get_url(const char *url); G_END_DECLS |