From cec20bb478bfbfc32622ec81b8e1b4393edb0867 Mon Sep 17 00:00:00 2001
From: Jan Lukas Gernert <jangernert@gmail.com>
Date: Sat, 18 Jul 2020 07:22:30 +0200
Subject: [PATCH] update gtk-rs
(cherry picked from commit 3d3d24f6e57097cb99073c084178c35fc268f8f4)
---
Cargo.toml | 18 +--
src/add_dialog.rs | 223 ++++++++++++-----------------
src/app.rs | 40 +++---
src/article_view/mod.rs | 6 +-
src/content_page/content_header.rs | 4 +-
src/login_screen/password_login.rs | 21 ++-
src/main_window.rs | 7 +-
src/settings/dialog.rs | 100 ++++++-------
src/settings/keybinding_editor.rs | 10 +-
src/settings/keybindings.rs | 105 +++++++-------
src/settings/theme_chooser.rs | 41 +++---
src/util/builder_helper.rs | 2 +-
src/util/gtk_util.rs | 6 +-
13 files changed, 270 insertions(+), 313 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 100a84ae0df4..6b7bb31bc7e3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,15 +12,15 @@ rust-embed = { version = "5.5", features = ["debug-embed"] }
failure = "0.1"
serde = { version = "1.0", features = ["serde_derive"] }
serde_json = "1.0"
-cairo-rs = { version = "0.8", features = ["v1_16"] }
-pango = "0.8"
-glib = { version = "0.9" }
-gdk-pixbuf = { version = "0.8", features = ["v2_36"] }
-gtk = { version = "0.8", features = ["v3_24"] }
-gio = { version = "0.8", features = ["v2_58"] }
-gdk = { version = "0.12", features = ["v3_24"] }
-libhandy = { version = "0.5", features = ["v0_0_10"] }
-webkit2gtk = { version = "0.9", features = ["v2_16"] }
+cairo-rs = { version = "0.9", features = ["v1_16"] }
+pango = "0.9"
+glib = { version = "0.10" }
+gdk-pixbuf = { version = "0.9", features = ["v2_36"] }
+gtk = { version = "0.9", features = ["v3_24"] }
+gio = { version = "0.9", features = ["v2_58"] }
+gdk = { version = "0.13", features = ["v3_24"] }
+libhandy = { version = "0.6", features = ["v0_0_10"] }
+webkit2gtk = { version = "0.10", features = ["v2_16"] }
gettext-rs = { version = "0.4", features = ["gettext-system"] }
log4rs = "0.12"
dirs = "2.0"
diff --git a/src/add_dialog.rs b/src/add_dialog.rs
index 73f9d4dbe906..6c87e5f7ecfb 100644
--- a/src/add_dialog.rs
+++ b/src/add_dialog.rs
@@ -130,14 +130,10 @@ impl AddPopover {
// make parse button sensitive if entry contains text and vice versa
url_entry.connect_changed(clone!(@weak parse_button => @default-panic, move |entry| {
- if let Some(text) = entry.get_text() {
- if text.as_str().is_empty() {
- parse_button.set_sensitive(false);
- } else {
- parse_button.set_sensitive(true);
- }
- } else {
+ if entry.get_text().as_str().is_empty() {
parse_button.set_sensitive(false);
+ } else {
+ parse_button.set_sensitive(true);
}
entry.set_property_secondary_icon_name(None);
@@ -153,14 +149,10 @@ impl AddPopover {
// make parse button sensitive if entry contains text and vice versa
category_entry.connect_changed(clone!(@weak category_add_button => @default-panic, move |entry| {
- if let Some(text) = entry.get_text() {
- if text.as_str().is_empty() {
- category_add_button.set_sensitive(false);
- } else {
- category_add_button.set_sensitive(true);
- }
- } else {
+ if entry.get_text().as_str().is_empty() {
category_add_button.set_sensitive(false);
+ } else {
+ category_add_button.set_sensitive(true);
}
entry.set_property_secondary_icon_name(None);
@@ -176,14 +168,10 @@ impl AddPopover {
// make parse button sensitive if entry contains text and vice versa
tag_entry.connect_changed(clone!(@weak tag_add_button => @default-panic, move |entry| {
- if let Some(text) = entry.get_text() {
- if text.as_str().is_empty() {
- tag_add_button.set_sensitive(false);
- } else {
- tag_add_button.set_sensitive(true);
- }
- } else {
+ if entry.get_text().as_str().is_empty() {
tag_add_button.set_sensitive(false);
+ } else {
+ tag_add_button.set_sensitive(true);
}
entry.set_property_secondary_icon_name(None);
@@ -216,39 +204,33 @@ impl AddPopover {
@strong feed_url,
@strong settings => @default-panic, move |button|
{
- if let Some(url_text) = url_entry.get_text() {
- let mut url_text = url_text.as_str().to_owned();
- if !url_text.starts_with("http://") && !url_text.starts_with("https://") {
- url_text.insert_str(0, "https://");
- }
- if let Ok(url) = Url::parse(&url_text) {
- // set 'next' button insensitive and show spinner
- parse_button_stack.set_visible_child_name("spinner");
- button.set_sensitive(false);
-
- Self::parse_feed_url(
- &url,
- &settings,
- &threadpool,
- &main_stack,
- &feed_list,
- &feed_title_entry,
- &select_button,
- &select_button_stack,
- &favicon_image,
- &feed_url,
- &parse_button_stack,
- button,
- &url_entry);
- } else {
- error!("No valid url: '{}'", url_text);
- url_entry.set_property_secondary_icon_name(Some(WARN_ICON));
- url_entry.set_property_secondary_icon_tooltip_text(Some(&i18n("No valid URL.")));
- }
+ let mut url_text = url_entry.get_text().as_str().to_owned();
+ if !url_text.starts_with("http://") && !url_text.starts_with("https://") {
+ url_text.insert_str(0, "https://");
+ }
+ if let Ok(url) = Url::parse(&url_text) {
+ // set 'next' button insensitive and show spinner
+ parse_button_stack.set_visible_child_name("spinner");
+ button.set_sensitive(false);
+
+ Self::parse_feed_url(
+ &url,
+ &settings,
+ &threadpool,
+ &main_stack,
+ &feed_list,
+ &feed_title_entry,
+ &select_button,
+ &select_button_stack,
+ &favicon_image,
+ &feed_url,
+ &parse_button_stack,
+ button,
+ &url_entry);
} else {
- error!("Empty url");
+ error!("No valid url: '{}'", url_text);
url_entry.set_property_secondary_icon_name(Some(WARN_ICON));
- url_entry.set_property_secondary_icon_tooltip_text(Some(&i18n("Empty URL")));
+ url_entry.set_property_secondary_icon_tooltip_text(Some(&i18n("No valid URL.")));
}
}));
@@ -262,8 +244,6 @@ impl AddPopover {
let sensitive = Self::calc_add_button_sensitive(&feed_title_entry, &entry);
feed_add_button.set_sensitive(sensitive);
- let entry_text = entry.get_text().map(|t| t.as_str().to_owned());
-
let folder_icon = if category_combo.get_active_id().is_some() {
if let Some(id) = category_combo.get_active_id() {
let category_id = CategoryID::new(id.as_str());
@@ -272,13 +252,10 @@ impl AddPopover {
.replace(AddCategory::Existing(category_id));
}
None
- } else if entry_text.is_none() {
- feed_category.write().take();
- None
- } else if categories.iter().any(|c| Some(c.label.clone()) == entry_text) {
+ } else if categories.iter().any(|c| c.label == entry.get_text().as_str()) {
let category_id = categories
.iter()
- .find(|c| Some(c.label.clone()) == entry_text)
+ .find(|c| c.label == entry.get_text().as_str())
.map(|c| c.category_id.clone());
if let Some(category_id) = category_id {
@@ -288,9 +265,7 @@ impl AddPopover {
}
None
} else {
- feed_category.write().replace(AddCategory::New(
- entry_text.expect("entry_text already checked for None"),
- ));
+ feed_category.write().replace(AddCategory::New(entry.get_text().as_str().into()));
Some(NEW_CATEGORY_ICON)
};
@@ -333,7 +308,7 @@ impl AddPopover {
return;
}
};
- let feed_title = feed_title_entry.get_text().map(|title| title.as_str().to_owned());
+ let feed_title = if feed_title_entry.get_text().as_str().is_empty() { None } else { Some(feed_title_entry.get_text().as_str().into()) };
let feed_category = feed_category.read().clone();
Util::send(&sender, Action::AddFeed((feed_url, feed_title, feed_category)));
@@ -344,9 +319,8 @@ impl AddPopover {
@weak category_entry,
@strong sender => @default-panic, move |_button|
{
- let category_title = category_entry.get_text().map(|text| text.as_str().to_owned());
- if let Some(category_title) = category_title {
- Util::send(&sender, Action::AddCategory(category_title));
+ if !category_entry.get_text().as_str().is_empty() {
+ Util::send(&sender, Action::AddCategory(category_entry.get_text().as_str().into()));
popover.popdown()
}
}));
@@ -356,12 +330,11 @@ impl AddPopover {
@weak color_button,
@strong sender => @default-panic, move |_button|
{
- let tag_title = tag_entry.get_text().map(|text| text.as_str().to_owned());
let rgba = color_button.get_rgba();
let rgba = ColorRGBA::from_normalized(rgba.red, rgba.green, rgba.blue, rgba.alpha);
let color = rgba.to_string_no_alpha();
- if let Some(tag_title) = tag_title {
- Util::send(&sender, Action::AddTag(color, tag_title));
+ if !tag_entry.get_text().as_str().is_empty() {
+ Util::send(&sender, Action::AddTag(color, tag_entry.get_text().as_str().into()));
popover.popdown()
}
}));
@@ -496,61 +469,59 @@ impl AddPopover {
@weak select_button_stack => @default-panic, move |button|
{
if let Some(row) = list.get_selected_row() {
- if let Some(name) = row.get_widget_name() {
- select_button_stack.set_visible_child_name("spinner");
- button.set_sensitive(false);
-
- let url = Url::parse(name.as_str()).expect("should never fail since it comes from 'url.as_str()'");
- let feed_id = FeedID::new(url.get().as_str());
-
- let (sender, receiver) = oneshot::channel::<Option<ParsedUrl>>();
-
- let settings_clone = settings.clone();
- let thread_future = async move {
- let result = Runtime::new()
- .expect(RUNTIME_ERROR)
- .block_on(news_flash::feed_parser::download_and_parse_feed(
- &url, &feed_id, None, None, &App::build_client(&settings_clone),
- ))
- .ok();
- sender.send(result).expect(CHANNEL_ERROR);
- };
+ select_button_stack.set_visible_child_name("spinner");
+ button.set_sensitive(false);
+
+ let url = Url::parse(row.get_widget_name().as_str()).expect("should never fail since it comes from 'url.as_str()'");
+ let feed_id = FeedID::new(url.get().as_str());
- let glib_future = receiver.map(clone!(
- @strong threadpool,
- @weak button as select_button,
- @weak select_button_stack,
- @strong feed_url,
- @strong settings,
- @weak favicon,
- @weak title_entry,
- @weak stack as main_stack => @default-panic, move |res|
- {
- if let Some(ParsedUrl::SingleFeed(feed)) = res.expect(CHANNEL_ERROR) {
- Self::fill_feed_page(
- feed,
- &title_entry,
- &favicon,
- &feed_url,
- threadpool,
- &settings,
- );
- main_stack.set_visible_child_name("feed_page");
- } else if let Some(child) = row.get_child() {
- if let Ok(_box) = child.downcast::<Box>() {
- if let Some(icon) = _box.get_children().get(1) {
- icon.set_visible(true);
- }
+ let (sender, receiver) = oneshot::channel::<Option<ParsedUrl>>();
+
+ let settings_clone = settings.clone();
+ let thread_future = async move {
+ let result = Runtime::new()
+ .expect(RUNTIME_ERROR)
+ .block_on(news_flash::feed_parser::download_and_parse_feed(
+ &url, &feed_id, None, None, &App::build_client(&settings_clone),
+ ))
+ .ok();
+ sender.send(result).expect(CHANNEL_ERROR);
+ };
+
+ let glib_future = receiver.map(clone!(
+ @strong threadpool,
+ @weak button as select_button,
+ @weak select_button_stack,
+ @strong feed_url,
+ @strong settings,
+ @weak favicon,
+ @weak title_entry,
+ @weak stack as main_stack => @default-panic, move |res|
+ {
+ if let Some(ParsedUrl::SingleFeed(feed)) = res.expect(CHANNEL_ERROR) {
+ Self::fill_feed_page(
+ feed,
+ &title_entry,
+ &favicon,
+ &feed_url,
+ threadpool,
+ &settings,
+ );
+ main_stack.set_visible_child_name("feed_page");
+ } else if let Some(child) = row.get_child() {
+ if let Ok(_box) = child.downcast::<Box>() {
+ if let Some(icon) = _box.get_children().get(1) {
+ icon.set_visible(true);
}
}
+ }
- select_button_stack.set_visible_child_name("text");
- select_button.set_sensitive(true);
- }));
+ select_button_stack.set_visible_child_name("text");
+ select_button.set_sensitive(true);
+ }));
- threadpool.spawn_ok(thread_future);
- Util::glib_spawn_future(glib_future);
- }
+ threadpool.spawn_ok(thread_future);
+ Util::glib_spawn_future(glib_future);
}
}));
for (title, url) in feed_vec {
@@ -559,7 +530,7 @@ impl AddPopover {
label.set_ellipsize(EllipsizeMode::End);
label.set_xalign(0.0);
- let warn_icon = Image::new_from_icon_name(Some(WARN_ICON), IconSize::Button);
+ let warn_icon = Image::from_icon_name(Some(WARN_ICON), IconSize::Button);
warn_icon.set_tooltip_text(Some(&i18n("Failed to get Feed.")));
warn_icon.set_no_show_all(true);
@@ -597,16 +568,12 @@ impl AddPopover {
}
fn calc_add_button_sensitive(title_entry: &Entry, feed_category_entry: &Entry) -> bool {
- if let Some(text) = title_entry.get_text() {
- if text.as_str().is_empty() {
- return false;
- }
+ if title_entry.get_text().as_str().is_empty() {
+ return false;
}
- if let Some(text) = feed_category_entry.get_text() {
- if text.as_str().is_empty() {
- return false;
- }
+ if feed_category_entry.get_text().as_str().is_empty() {
+ return false;
}
true
diff --git a/src/app.rs b/src/app.rs
index c57bf2fbf82b..cdc130270e9d 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -994,17 +994,15 @@ impl App {
@weak dialog.dialog as rename_dialog,
@strong self.sender as sender => @default-panic, move |_button|
{
- let new_label = match rename_entry.get_text().map(|label| label.to_owned()) {
- Some(label) => label,
- None => {
- Util::send(
- &sender,
- Action::ErrorSimpleMessage("No valid title to rename feed.".to_owned()),
- );
- rename_dialog.emit_close();
- return;
- }
- };
+ let new_label = rename_entry.get_text().to_owned();
+ if new_label.is_empty() {
+ Util::send(
+ &sender,
+ Action::ErrorSimpleMessage("No valid title to rename feed.".to_owned()),
+ );
+ rename_dialog.emit_close();
+ return;
+ }
let feed = feed.clone();
Util::send(&sender, Action::RenameFeed((feed, new_label)));
@@ -1065,17 +1063,15 @@ impl App {
@weak dialog.rename_entry as rename_entry,
@strong self.sender as sender => @default-panic, move |_button|
{
- let new_label = match rename_entry.get_text().map(|label| label.to_owned()) {
- Some(label) => label,
- None => {
- Util::send(
- &sender,
- Action::ErrorSimpleMessage("No valid title to rename feed.".to_owned()),
- );
- rename_dialog.emit_close();
- return;
- }
- };
+ let new_label = rename_entry.get_text().to_owned();
+ if new_label.is_empty() {
+ Util::send(
+ &sender,
+ Action::ErrorSimpleMessage("No valid title to rename category.".to_owned()),
+ );
+ rename_dialog.emit_close();
+ return;
+ }
let category = category.clone();
Util::send(&sender, Action::RenameCategory((category, new_label)));
diff --git a/src/article_view/mod.rs b/src/article_view/mod.rs
index ae40cc8b398f..227521935b5a 100644
--- a/src/article_view/mod.rs
+++ b/src/article_view/mod.rs
@@ -14,8 +14,8 @@ use crate::settings::Settings;
use crate::util::{BuilderHelper, DateUtil, FileUtil, GtkUtil, Util, GTK_RESOURCE_FILE_ERROR};
use crate::Resources;
use gdk::{
- enums::key::KP_Add as KP_ADD, enums::key::KP_Subtract as KP_SUBTRACT, enums::key::KP_0, Cursor, CursorType,
- Display, EventMask, ModifierType, ScrollDirection,
+ keys::constants::KP_Add as KP_ADD, keys::constants::KP_Subtract as KP_SUBTRACT, keys::constants::KP_0, Cursor,
+ CursorType, Display, EventMask, ModifierType, ScrollDirection,
};
use gio::{Cancellable, Settings as GSettings, SettingsExt as GSettingsExt};
use glib::{clone, object::Cast, source::Continue, translate::ToGlib, MainLoop, Sender};
@@ -356,7 +356,7 @@ impl ArticleView {
settings.set_media_playback_requires_user_gesture(true);
settings.set_user_agent_with_application_details(Some("NewsFlash"), None);
- let webview = WebView::new_with_context(ctx);
+ let webview = WebView::with_context(ctx);
webview.set_settings(&settings);
webview.set_events(EventMask::POINTER_MOTION_MASK);
webview.set_events(EventMask::SCROLL_MASK);
diff --git a/src/content_page/content_header.rs b/src/content_page/content_header.rs
index e3bd5e371a7c..ad273ab55684 100644
--- a/src/content_page/content_header.rs
+++ b/src/content_page/content_header.rs
@@ -326,9 +326,7 @@ impl ContentHeader {
fn setup_search_entry(search_entry: &SearchEntry, sender: &Sender<Action>) {
search_entry.connect_search_changed(clone!(@strong sender => @default-panic, move |search_entry| {
- if let Some(text) = search_entry.get_text() {
- Util::send(&sender, Action::SearchTerm(text.as_str().to_owned()));
- }
+ Util::send(&sender, Action::SearchTerm(search_entry.get_text().as_str().into()));
}));
}
diff --git a/src/login_screen/password_login.rs b/src/login_screen/password_login.rs
index be1e1fd1cf1f..ec00dfd0289e 100644
--- a/src/login_screen/password_login.rs
+++ b/src/login_screen/password_login.rs
@@ -186,35 +186,32 @@ impl PasswordLogin {
@strong self.sender as sender => @default-panic, move |_button|
{
let url: Option<String> = if pw_gui_desc.url {
- match url_entry.get_text() {
- Some(url) => Some(url.as_str().to_owned()),
- None => None,
- }
+ Some(url_entry.get_text().as_str().to_owned())
} else {
None
};
let user = user_entry
.get_text()
- .expect("Login button should be insensitive if user entry is empty.")
.as_str()
.to_owned();
let password = pass_entry
.get_text()
- .expect("Login button should be insensitive if password entry is empty.")
.as_str()
.to_owned();
let http_user: Option<String> = if http_revealer.get_child_revealed() {
- match http_user_entry.get_text() {
- Some(user) => Some(user.as_str().to_owned()),
- None => None,
+ if http_user_entry.get_text().is_empty() {
+ None
+ } else {
+ Some(http_user_entry.get_text().as_str().to_owned())
}
} else {
None
};
let http_password: Option<String> = if http_revealer.get_child_revealed() {
- match http_pass_entry.get_text() {
- Some(pass) => Some(pass.as_str().to_owned()),
- None => None,
+ if http_pass_entry.get_text().is_empty() {
+ None
+ } else {
+ Some(http_pass_entry.get_text().as_str().to_owned())
}
} else {
None
diff --git a/src/main_window.rs b/src/main_window.rs
index cb2958748491..6690be3b8346 100644
--- a/src/main_window.rs
+++ b/src/main_window.rs
@@ -20,8 +20,9 @@ use futures::FutureExt;
use gdk::EventKey;
use glib::{self, clone, Sender};
use gtk::{
- self, ApplicationWindow, CssProvider, CssProviderExt, GtkWindowExt, Inhibit, Settings as GtkSettings, SettingsExt,
- Stack, StackExt, StackTransitionType, StyleContext, StyleContextExt, WidgetExt,
+ self, prelude::WidgetExtManual, ApplicationWindow, CssProvider, CssProviderExt, GtkWindowExt, Inhibit,
+ Settings as GtkSettings, SettingsExt, Stack, StackExt, StackTransitionType, StyleContext, StyleContextExt,
+ WidgetExt,
};
use log::{error, warn};
use news_flash::models::{
@@ -326,7 +327,7 @@ impl MainWindow {
if let Some(keybinding) = keybinding {
let (keyval, modifier) = gtk::accelerator_parse(&keybinding);
- if gdk::keyval_to_lower(keyval) == gdk::keyval_to_lower(event.get_keyval()) {
+ if gdk::keyval_to_lower(keyval) == gdk::keyval_to_lower(*event.get_keyval()) {
if modifier.is_empty() {
if Keybindings::clean_modifier(event.get_state()).is_empty() {
return true;
diff --git a/src/settings/dialog.rs b/src/settings/dialog.rs
index e7e731916bec..947ee5f7da09 100644
--- a/src/settings/dialog.rs
+++ b/src/settings/dialog.rs
@@ -207,10 +207,8 @@ impl SettingsDialog {
if let Ok(listbox) = listbox.downcast::<ListBox>() {
listbox.connect_row_activated(
clone!(@weak self.sync_pop as sync_pop => @default-panic, move |_list, row| {
- if let Some(name) = row.get_widget_name() {
- if name == "sync_row" {
- sync_pop.popup();
- }
+ if row.get_widget_name() == "sync_row" {
+ sync_pop.popup();
}
}),
);
@@ -259,10 +257,8 @@ impl SettingsDialog {
if let Ok(listbox) = listbox.downcast::<ListBox>() {
listbox.connect_row_activated(
clone!(@weak self.article_order_pop as article_order_pop => @default-panic, move |_list, row| {
- if let Some(name) = row.get_widget_name() {
- if name == "article_order_row" {
- article_order_pop.popup();
- }
+ if row.get_widget_name() == "article_order_row" {
+ article_order_pop.popup();
}
}),
);
@@ -306,18 +302,16 @@ impl SettingsDialog {
@weak self.settings as settings,
@strong sender => @default-panic, move |_list, row|
{
- if let Some(name) = row.get_widget_name() {
- if name == "article_theme_row" {
- let theme_chooser = ThemeChooser::new(&article_theme_event, &sender, &settings);
- theme_chooser.widget().connect_closed(clone!(
- @strong sender,
- @weak settings => @default-panic, move |_pop|
- {
- article_theme_label.set_label(settings.read().get_article_view_theme().name());
- Util::send(&sender, Action::RedrawArticle);
- }));
- theme_chooser.widget().popup();
- }
+ if row.get_widget_name() == "article_theme_row" {
+ let theme_chooser = ThemeChooser::new(&article_theme_event, &sender, &settings);
+ theme_chooser.widget().connect_closed(clone!(
+ @strong sender,
+ @weak settings => @default-panic, move |_pop|
+ {
+ article_theme_label.set_label(settings.read().get_article_view_theme().name());
+ Util::send(&sender, Action::RedrawArticle);
+ }));
+ theme_chooser.widget().popup();
}
}));
}
@@ -464,43 +458,41 @@ impl SettingsDialog {
@strong sender,
@strong id => @default-panic, move |_list, row|
{
- if let Some(name) = row.get_widget_name() {
- if name.as_str() == row_name {
- let editor = KeybindingEditor::new(&dialog, &info_text);
- editor.widget().present();
- editor.widget().connect_close(clone!(
- @weak label,
- @weak settings,
- @strong sender,
- @strong id => @default-panic, move |_dialog|
- {
- let _settings = settings.clone();
- match &*editor.keybinding.read() {
- KeybindState::Canceled | KeybindState::Illegal => {}
- KeybindState::Disabled => {
- if Keybindings::write_keybinding(&id, None, &settings).is_ok() {
- Self::keybind_label_text(None, &label);
- } else {
- Util::send(
- &sender,
- Action::ErrorSimpleMessage("Failed to write keybinding.".to_owned()),
- );
- }
+ if row.get_widget_name().as_str() == row_name {
+ let editor = KeybindingEditor::new(&dialog, &info_text);
+ editor.widget().present();
+ editor.widget().connect_close(clone!(
+ @weak label,
+ @weak settings,
+ @strong sender,
+ @strong id => @default-panic, move |_dialog|
+ {
+ let _settings = settings.clone();
+ match &*editor.keybinding.read() {
+ KeybindState::Canceled | KeybindState::Illegal => {}
+ KeybindState::Disabled => {
+ if Keybindings::write_keybinding(&id, None, &settings).is_ok() {
+ Self::keybind_label_text(None, &label);
+ } else {
+ Util::send(
+ &sender,
+ Action::ErrorSimpleMessage("Failed to write keybinding.".to_owned()),
+ );
}
- KeybindState::Enabled(keybind) => {
- if Keybindings::write_keybinding(&id, Some(keybind.clone()), &settings).is_ok()
- {
- Self::keybind_label_text(Some(keybind.clone()), &label);
- } else {
- Util::send(
- &sender,
- Action::ErrorSimpleMessage("Failed to write keybinding.".to_owned()),
- );
- }
+ }
+ KeybindState::Enabled(keybind) => {
+ if Keybindings::write_keybinding(&id, Some(keybind.clone()), &settings).is_ok()
+ {
+ Self::keybind_label_text(Some(keybind.clone()), &label);
+ } else {
+ Util::send(
+ &sender,
+ Action::ErrorSimpleMessage("Failed to write keybinding.".to_owned()),
+ );
}
}
- }));
- }
+ }
+ }));
}
}));
}
diff --git a/src/settings/keybinding_editor.rs b/src/settings/keybinding_editor.rs
index 530facde1d0c..f8deb9c11654 100644
--- a/src/settings/keybinding_editor.rs
+++ b/src/settings/keybinding_editor.rs
@@ -1,7 +1,7 @@
use super::keybindings::Keybindings;
use crate::i18n::i18n;
use crate::util::BuilderHelper;
-use gdk::enums::key;
+use gdk::keys::constants;
use glib::{clone, object::IsA};
use gtk::{
Align, Button, ButtonExt, Dialog, DialogExt, GtkWindowExt, Inhibit, Label, LabelExt, ShortcutLabel, Stack,
@@ -51,13 +51,13 @@ impl KeybindingEditor {
let keyval = event.get_keyval();
let modifier = Keybindings::clean_modifier(event.get_state());
- if keyval == key::Escape {
+ if keyval == constants::Escape {
*keybinding_public.write() = KeybindState::Canceled;
widget.emit_close();
return Inhibit(true);
}
- if keyval == key::BackSpace {
+ if keyval == constants::BackSpace {
shortcut_meta.set_label(&i18n("Disable Keybinding"));
set_button.set_visible(true);
cancel_button.set_visible(true);
@@ -66,11 +66,11 @@ impl KeybindingEditor {
return Inhibit(false);
}
- let internal_shortcut = gtk::accelerator_name(keyval, modifier)
+ let internal_shortcut = gtk::accelerator_name(*keyval, modifier)
.expect("Shortcut not convertable. This should never happen!")
.to_string();
- if Keybindings::parse_keyval(keyval).is_some() {
+ if Keybindings::parse_keyval(*keyval).is_some() {
set_button.set_visible(true);
cancel_button.set_visible(true);
shortcut_label.set_accelerator(&internal_shortcut);
diff --git a/src/settings/keybindings.rs b/src/settings/keybindings.rs
index d6bb59962280..a04c7c250a7d 100644
--- a/src/settings/keybindings.rs
+++ b/src/settings/keybindings.rs
@@ -2,8 +2,9 @@ use super::error::{SettingsError, SettingsErrorKind};
use crate::settings::Settings;
use crate::util::{BuilderHelper, GTK_RESOURCE_FILE_ERROR};
use crate::Resources;
-use gdk::{enums::key, ModifierType};
+use gdk::{keys::constants, keys::Key, ModifierType};
use glib::object::{Cast, IsA};
+use glib::translate::FromGlib;
use gtk::{BinExt, Box, ContainerExt, GtkWindowExt, ShortcutsWindow, Stack, StackExt, WidgetExt, Window};
use log::warn;
use parking_lot::RwLock;
@@ -54,42 +55,42 @@ impl Keybindings {
pub fn parse_keyval(keyval: u32) -> Option<String> {
let keyval = gdk::keyval_to_upper(keyval);
-
+ let keyval = Key::from_glib(keyval);
let manual_parsed = match keyval {
- key::Shift_L
- | key::Control_L
- | key::Alt_L
- | key::Meta_L
- | key::Super_L
- | key::Hyper_L
- | key::Shift_R
- | key::Control_R
- | key::Alt_R
- | key::Meta_R
- | key::Super_R
- | key::Hyper_R => Self::get_modifier_label(keyval),
- key::Left => Some("←".to_owned()),
- key::Right => Some("→".to_owned()),
- key::Down => Some("↓".to_owned()),
- key::Up => Some("↑".to_owned()),
- key::space => Some("␣".to_owned()),
- key::Return => Some("⏎".to_owned()),
- key::Delete => Some("Del".to_owned()),
- key::Page_Up => Some("⇑".to_owned()),
- key::Page_Down => Some("⇓".to_owned()),
- key::BackSpace => Some("Backspace".to_owned()),
- key::F1 => Some("F1".to_owned()),
- key::F2 => Some("F2".to_owned()),
- key::F3 => Some("F3".to_owned()),
- key::F4 => Some("F4".to_owned()),
- key::F5 => Some("F5".to_owned()),
- key::F6 => Some("F6".to_owned()),
- key::F7 => Some("F7".to_owned()),
- key::F8 => Some("F8".to_owned()),
- key::F9 => Some("F9".to_owned()),
- key::F10 => Some("F10".to_owned()),
- key::F11 => Some("F11".to_owned()),
- key::F12 => Some("F12".to_owned()),
+ constants::Shift_L
+ | constants::Control_L
+ | constants::Alt_L
+ | constants::Meta_L
+ | constants::Super_L
+ | constants::Hyper_L
+ | constants::Shift_R
+ | constants::Control_R
+ | constants::Alt_R
+ | constants::Meta_R
+ | constants::Super_R
+ | constants::Hyper_R => Self::get_modifier_label(&keyval),
+ constants::Left => Some("←".to_owned()),
+ constants::Right => Some("→".to_owned()),
+ constants::Down => Some("↓".to_owned()),
+ constants::Up => Some("↑".to_owned()),
+ constants::space => Some("␣".to_owned()),
+ constants::Return => Some("⏎".to_owned()),
+ constants::Delete => Some("Del".to_owned()),
+ constants::Page_Up => Some("⇑".to_owned()),
+ constants::Page_Down => Some("⇓".to_owned()),
+ constants::BackSpace => Some("Backspace".to_owned()),
+ constants::F1 => Some("F1".to_owned()),
+ constants::F2 => Some("F2".to_owned()),
+ constants::F3 => Some("F3".to_owned()),
+ constants::F4 => Some("F4".to_owned()),
+ constants::F5 => Some("F5".to_owned()),
+ constants::F6 => Some("F6".to_owned()),
+ constants::F7 => Some("F7".to_owned()),
+ constants::F8 => Some("F8".to_owned()),
+ constants::F9 => Some("F9".to_owned()),
+ constants::F10 => Some("F10".to_owned()),
+ constants::F11 => Some("F11".to_owned()),
+ constants::F12 => Some("F12".to_owned()),
_ => None,
};
@@ -97,7 +98,7 @@ impl Keybindings {
return manual_parsed;
}
- match gdk::keyval_to_unicode(keyval) {
+ match keyval.to_unicode() {
Some(keyval) => {
let mut buffer: [u8; 4] = [0; 4];
Some(keyval.encode_utf8(&mut buffer).to_owned())
@@ -106,24 +107,30 @@ impl Keybindings {
}
}
- fn get_modifier_label(keyval: u32) -> Option<String> {
+ fn get_modifier_label(keyval: &Key) -> Option<String> {
let mut mod_string = String::new();
match keyval {
- key::Shift_L | key::Control_L | key::Alt_L | key::Meta_L | key::Super_L | key::Hyper_L => {
- mod_string.push('L')
- }
- key::Shift_R | key::Control_R | key::Alt_R | key::Meta_R | key::Super_R | key::Hyper_R => {
- mod_string.push('R')
- }
+ &constants::Shift_L
+ | &constants::Control_L
+ | &constants::Alt_L
+ | &constants::Meta_L
+ | &constants::Super_L
+ | &constants::Hyper_L => mod_string.push('L'),
+ &constants::Shift_R
+ | &constants::Control_R
+ | &constants::Alt_R
+ | &constants::Meta_R
+ | &constants::Super_R
+ | &constants::Hyper_R => mod_string.push('R'),
_ => return None,
}
match keyval {
- key::Shift_L | key::Shift_R => mod_string.push_str("Shift"),
- key::Control_L | key::Control_R => mod_string.push_str("Ctrl"),
- key::Meta_L | key::Meta_R => mod_string.push_str("Meta"),
- key::Super_L | key::Super_R => mod_string.push_str("Super"),
- key::Hyper_L | key::Hyper_R => mod_string.push_str("Hyper"),
+ &constants::Shift_L | &constants::Shift_R => mod_string.push_str("Shift"),
+ &constants::Control_L | &constants::Control_R => mod_string.push_str("Ctrl"),
+ &constants::Meta_L | &constants::Meta_R => mod_string.push_str("Meta"),
+ &constants::Super_L | &constants::Super_R => mod_string.push_str("Super"),
+ &constants::Hyper_L | &constants::Hyper_R => mod_string.push_str("Hyper"),
_ => return None,
}
diff --git a/src/settings/theme_chooser.rs b/src/settings/theme_chooser.rs
index a02d2ca8e940..e747e91e3de3 100644
--- a/src/settings/theme_chooser.rs
+++ b/src/settings/theme_chooser.rs
@@ -82,29 +82,28 @@ impl ThemeChooser {
let theme_list = builder.get::<ListBox>("theme_list");
theme_list.connect_row_activated(
clone!(@strong sender, @weak settings, @weak pop => @default-panic, move |_list, row| {
- if let Some(row_name) = row.get_widget_name() {
- let result = if "default" == row_name {
- settings.write().set_article_view_theme(ArticleTheme::Default)
- } else if "spring" == row_name {
- settings.write().set_article_view_theme(ArticleTheme::Spring)
- } else if "midnight" == row_name {
- settings.write().set_article_view_theme(ArticleTheme::Midnight)
- } else if "parchment" == row_name {
- settings.write().set_article_view_theme(ArticleTheme::Parchment)
- } else if "gruvbox" == row_name {
- settings.write().set_article_view_theme(ArticleTheme::Gruvbox)
- } else {
- Ok(())
- };
+ let row_name = row.get_widget_name();
+ let result = if "default" == row_name {
+ settings.write().set_article_view_theme(ArticleTheme::Default)
+ } else if "spring" == row_name {
+ settings.write().set_article_view_theme(ArticleTheme::Spring)
+ } else if "midnight" == row_name {
+ settings.write().set_article_view_theme(ArticleTheme::Midnight)
+ } else if "parchment" == row_name {
+ settings.write().set_article_view_theme(ArticleTheme::Parchment)
+ } else if "gruvbox" == row_name {
+ settings.write().set_article_view_theme(ArticleTheme::Gruvbox)
+ } else {
+ Ok(())
+ };
- if result.is_err() {
- Util::send(
- &sender,
- Action::ErrorSimpleMessage("Failed to set theme setting.".to_owned()),
- );
- }
- pop.popdown();
+ if result.is_err() {
+ Util::send(
+ &sender,
+ Action::ErrorSimpleMessage("Failed to set theme setting.".to_owned()),
+ );
}
+ pop.popdown();
}),
);
diff --git a/src/util/builder_helper.rs b/src/util/builder_helper.rs
index c890bf510e93..408581fcd4d2 100644
--- a/src/util/builder_helper.rs
+++ b/src/util/builder_helper.rs
@@ -17,7 +17,7 @@ impl BuilderHelper {
}
pub fn new_from_xml(ui_xml: &str) -> Self {
- let builder = Builder::new_from_string(ui_xml);
+ let builder = Builder::from_string(ui_xml);
BuilderHelper { builder }
}
diff --git a/src/util/gtk_util.rs b/src/util/gtk_util.rs
index d8ec0f0666d8..0ae774930db8 100644
--- a/src/util/gtk_util.rs
+++ b/src/util/gtk_util.rs
@@ -30,7 +30,7 @@ impl GtkUtil {
pub fn register_symbolic_icons() {
let data = Resources::get("gresource_bundles/symbolic_icons.gresource").expect(GTK_RESOURCE_FILE_ERROR);
let bytes = Bytes::from(&data);
- let icon_resource = Resource::new_from_data(&bytes).expect("Error creating gio resource.");
+ let icon_resource = Resource::from_data(&bytes).expect("Error creating gio resource.");
gio::resources_register(&icon_resource);
IconTheme::get_default()
.unwrap_or_else(|| panic!("Failed to register symbolic icons."))
@@ -74,10 +74,10 @@ impl GtkUtil {
scale_factor: i32,
) -> Result<Pixbuf, UtilError> {
let bytes = Bytes::from(data);
- let stream = MemoryInputStream::new_from_bytes(&bytes);
+ let stream = MemoryInputStream::from_bytes(&bytes);
let cancellable: Option<&Cancellable> = None;
let pixbuf =
- Pixbuf::new_from_stream_at_scale(&stream, width * scale_factor, height * scale_factor, true, cancellable)
+ Pixbuf::from_stream_at_scale(&stream, width * scale_factor, height * scale_factor, true, cancellable)
.context(UtilErrorKind::CairoSurface)?;
Ok(pixbuf)
}
--
2.26.2