Maxime Devos: 1 Update to new GTK version (and new version of dependencies) 6 files changed, 72 insertions(+), 75 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.sr.ht/~julienxx/castor/patches/32444/mbox | git am -3Learn more about email & git
I don't use Cargo myself, so you may need to double-check Cargo.toml. --- Cargo.toml | 16 +++++++-------- src/colors.rs | 4 ++-- src/dialog.rs | 20 +++++++++---------- src/draw.rs | 54 +++++++++++++++++++++++++-------------------------- src/gui.rs | 23 +++++++++++----------- src/main.rs | 30 +++++++++++++--------------- 6 files changed, 72 insertions(+), 75 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3c8fd77..5f60017 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,13 +7,13 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -gdk = "~0.12" -gdk-pixbuf = "~0.8" -gio = "~0.8" -glib = "~0.9" -glib-sys = "~0.9" -pango = "~0.8" -pango-sys = "~0.9" +gdk = "~0.14" +gdk-pixbuf = "~0.14" +gio = "~0.14" +glib = "~0.14" +glib-sys = "~0.14" +pango = "~0.14" +pango-sys = "~0.14" open = "~2.0" regex = "~1.5" linkify = "~0.7" @@ -31,5 +31,5 @@ serde_derive="~1.0" textwrap="~0.14" [dependencies.gtk] -version = "0.8.0" +version = "0.14.3" features = ["v3_18"] \ No newline at end of file diff --git a/src/colors.rs b/src/colors.rs index 1535214..684e727 100644 --- a/src/colors.rs +++ b/src/colors.rs @@ -34,14 +34,14 @@ pub mod colors { span_opened += 1; s.push_str(&format!( "<span foreground={:?}>", - ansi_color_to_hex(*color) + ansi_color_to_hex((*color).into()) )) } else { let color = colors.last().unwrap(); span_opened += 1; s.push_str(&format!( "<span background={:?}>", - ansi_color_to_hex(*color) + ansi_color_to_hex((*color).into()) )) } } diff --git a/src/dialog.rs b/src/dialog.rs index 485a5ec..3188c42 100644 --- a/src/dialog.rs +++ b/src/dialog.rs @@ -8,16 +8,16 @@ use crate::gui::Gui; use crate::protocols::Gemini; pub fn info(gui: &Arc<Gui>, message: &str) { - let dialog = gtk::Dialog::new_with_buttons( + let dialog = gtk::Dialog::with_buttons( Some("Info"), Some(gui.window()), gtk::DialogFlags::MODAL, &[("Close", ResponseType::Close)], ); dialog.set_default_response(ResponseType::Close); - dialog.connect_response(|dialog, _| dialog.destroy()); + dialog.connect_response(|dialog, _| unsafe { dialog.destroy() }); - let content_area = dialog.get_content_area(); + let content_area = dialog.content_area(); let message = gtk::Label::new(Some(message)); content_area.add(&message); @@ -25,16 +25,16 @@ pub fn info(gui: &Arc<Gui>, message: &str) { } pub fn error(gui: &Arc<Gui>, message: &str) { - let dialog = gtk::Dialog::new_with_buttons( + let dialog = gtk::Dialog::with_buttons( Some("Error"), Some(gui.window()), gtk::DialogFlags::MODAL, &[("Close", ResponseType::Close)], ); dialog.set_default_response(ResponseType::Close); - dialog.connect_response(|dialog, _| dialog.destroy()); + dialog.connect_response(|dialog, _| unsafe { dialog.destroy() }); - let content_area = dialog.get_content_area(); + let content_area = dialog.content_area(); let message = gtk::Label::new(Some(message)); content_area.add(&message); @@ -42,7 +42,7 @@ pub fn error(gui: &Arc<Gui>, message: &str) { } pub fn input(gui: &Arc<Gui>, url: Url, message: &str) { - let dialog = gtk::Dialog::new_with_buttons( + let dialog = gtk::Dialog::with_buttons( Some(message), Some(gui.window()), gtk::DialogFlags::MODAL, @@ -52,19 +52,19 @@ pub fn input(gui: &Arc<Gui>, url: Url, message: &str) { ], ); - let content_area = dialog.get_content_area(); + let content_area = dialog.content_area(); let entry = gtk::Entry::new(); content_area.add(&entry); dialog.show_all(); if dialog.run() == gtk::ResponseType::Accept { - let response = entry.get_text().expect("get_text failed").to_string(); + let response = entry.text().to_string(); let cleaned: &str = &url[..Position::AfterPath]; let full_url = format!("{}?{}", cleaned.to_string(), response); crate::visit_url(&gui, Gemini { source: full_url }); } - dialog.destroy(); + unsafe { dialog.destroy() }; } diff --git a/src/draw.rs b/src/draw.rs index b435910..fd62406 100644 --- a/src/draw.rs +++ b/src/draw.rs @@ -22,7 +22,7 @@ pub fn gemini_content( content: Vec<Result<crate::gemini::parser::TextElement, crate::gemini::parser::ParseError>>, ) -> TextBuffer { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); let mut mono_toggle = false; let font_family = crate::settings::get_gemini_text_font_family(); @@ -33,7 +33,7 @@ pub fn gemini_content( mono_toggle = !mono_toggle; } Ok(crate::gemini::parser::TextElement::H1(header)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(escape_text(&header))); } else { @@ -52,7 +52,7 @@ pub fn gemini_content( } } Ok(crate::gemini::parser::TextElement::H2(header)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(escape_text(&header))); } else { @@ -71,7 +71,7 @@ pub fn gemini_content( } } Ok(crate::gemini::parser::TextElement::H3(header)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(escape_text(&header))); } else { @@ -90,7 +90,7 @@ pub fn gemini_content( } } Ok(crate::gemini::parser::TextElement::ListItem(item)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(item)); } else { @@ -109,7 +109,7 @@ pub fn gemini_content( } } Ok(crate::gemini::parser::TextElement::Quote(text)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(text)); } else { @@ -128,7 +128,7 @@ pub fn gemini_content( } } Ok(crate::gemini::parser::TextElement::Text(text)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); if mono_toggle { buffer.insert_markup(&mut end_iter, &mono_span(colors::colorize(&text))); } else { @@ -146,7 +146,7 @@ pub fn gemini_content( } Ok(crate::gemini::parser::TextElement::LinkItem(link_item)) => { if mono_toggle { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert_markup(&mut end_iter, &mono_span(escape_text(&link_item))); } else { gemini_link(&gui, link_item); @@ -160,10 +160,10 @@ pub fn gemini_content( pub fn gemini_text_content(gui: &Arc<Gui>, content: std::str::Lines) -> TextBuffer { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); for line in content { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert_markup( &mut end_iter, &format!( @@ -181,12 +181,12 @@ pub fn gopher_content( content: Vec<Result<crate::gopher::parser::TextElement, crate::gopher::parser::ParseError>>, ) -> TextBuffer { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); for el in content { match el { Ok(crate::gopher::parser::TextElement::Text(text)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); let text = colors::colorize(&text); buffer.insert_markup( @@ -223,12 +223,12 @@ pub fn finger_content( content: Vec<Result<crate::finger::parser::TextElement, crate::finger::parser::ParseError>>, ) -> TextBuffer { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); for el in content { match el { Ok(crate::finger::parser::TextElement::Text(text)) => { - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert_markup( &mut end_iter, @@ -392,7 +392,7 @@ pub fn gopher_link(gui: &Arc<Gui>, link_item: String) { pub fn insert_button(gui: &Arc<Gui>, url: Url, label: String) { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); let button_label = if label.is_empty() { url.to_string() @@ -400,7 +400,7 @@ pub fn insert_button(gui: &Arc<Gui>, url: Url, label: String) { label }; - let button = gtk::Button::new_with_label(&button_label); + let button = gtk::Button::with_label(&button_label); button.set_tooltip_text(Some(&url.to_string())); button.connect_clicked(clone!(@weak gui => move |_| { @@ -412,16 +412,16 @@ pub fn insert_button(gui: &Arc<Gui>, url: Url, label: String) { } })); - let mut start_iter = buffer.get_end_iter(); + let mut start_iter = buffer.end_iter(); let anchor = buffer.create_child_anchor(&mut start_iter).unwrap(); content_view.add_child_at_anchor(&button, &anchor); - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert(&mut end_iter, "\n"); } pub fn insert_gopher_file_button(gui: &Arc<Gui>, url: Url, label: String) { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); let button_label = if label.is_empty() { url.to_string() @@ -429,7 +429,7 @@ pub fn insert_gopher_file_button(gui: &Arc<Gui>, url: Url, label: String) { label }; - let button = gtk::Button::new_with_label(&button_label); + let button = gtk::Button::with_label(&button_label); button.set_tooltip_text(Some(&url.to_string())); button.connect_clicked(move |_| { @@ -440,28 +440,28 @@ pub fn insert_gopher_file_button(gui: &Arc<Gui>, url: Url, label: String) { crate::client::download(content); }); - let mut start_iter = buffer.get_end_iter(); + let mut start_iter = buffer.end_iter(); let anchor = buffer.create_child_anchor(&mut start_iter).unwrap(); content_view.add_child_at_anchor(&button, &anchor); - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert(&mut end_iter, "\n"); } pub fn insert_external_button(gui: &Arc<Gui>, url: Url, label: &str) { let content_view = gui.content_view(); - let buffer = content_view.get_buffer().unwrap(); + let buffer = content_view.buffer().unwrap(); - let button = gtk::Button::new_with_label(&label); + let button = gtk::Button::with_label(&label); button.set_tooltip_text(Some(&url.to_string())); button.connect_clicked(move |_| { open::that(url.to_string()).unwrap(); }); - let mut start_iter = buffer.get_end_iter(); + let mut start_iter = buffer.end_iter(); let anchor = buffer.create_child_anchor(&mut start_iter).unwrap(); content_view.add_child_at_anchor(&button, &anchor); - let mut end_iter = buffer.get_end_iter(); + let mut end_iter = buffer.end_iter(); buffer.insert(&mut end_iter, "\n"); } @@ -483,7 +483,7 @@ fn mono_span(text: String) -> String { } fn width(gui: &Arc<Gui>) -> usize { - let (win_width, _) = gtk::ApplicationWindow::get_size(gui.window()); + let (win_width, _) = gtk::ApplicationWindow::size(gui.window()); let calculated_width = (win_width / 10).try_into().unwrap(); std::cmp::min(calculated_width, crate::settings::max_width().unwrap_or(std::usize::MAX)) } diff --git a/src/gui.rs b/src/gui.rs index 5b896c9..da7074b 100644 --- a/src/gui.rs +++ b/src/gui.rs @@ -1,7 +1,6 @@ use gtk::prelude::*; use gtk::{ApplicationWindow, Button, Entry, TextView}; -use gdk::WindowExt; pub struct Gui { window: ApplicationWindow, @@ -24,28 +23,28 @@ impl Gui { pub fn new() -> Gui { // Initialize the UI from the Glade XML. let glade_src = include_str!("castor.glade"); - let builder = gtk::Builder::new_from_string(glade_src); + let builder = gtk::Builder::from_string(glade_src); // Get handles for the various controls we need to use. - let window: ApplicationWindow = builder.get_object("window").expect("Couldn't get window"); - let url_bar: Entry = builder.get_object("url_bar").expect("Couldn't get url_bar"); + let window: ApplicationWindow = builder.object("window").expect("Couldn't get window"); + let url_bar: Entry = builder.object("url_bar").expect("Couldn't get url_bar"); let content_view: TextView = builder - .get_object("content_view") + .object("content_view") .expect("Couldn't get content_view"); let back_button: Button = builder - .get_object("back_button") + .object("back_button") .expect("Couldn't get back_button"); let forward_button: Button = builder - .get_object("forward_button") + .object("forward_button") .expect("Couldn't get forward_button"); let refresh_button: Button = builder - .get_object("refresh_button") + .object("refresh_button") .expect("Couldn't get refresh_button"); let add_bookmark_button: Button = builder - .get_object("add_bookmark_button") + .object("add_bookmark_button") .expect("Couldn't get add_bookmark_button"); let show_bookmarks_button: Button = builder - .get_object("show_bookmarks_button") + .object("show_bookmarks_button") .expect("Couldn't get show_bookmarks_button"); Gui { @@ -68,8 +67,8 @@ impl Gui { Inhibit(false) }); self.content_view.connect_motion_notify_event(|win, _| { - let w = gtk::TextViewExt::get_window(win, gtk::TextWindowType::Text).unwrap(); - w.set_cursor(gdk::Cursor::new_from_name(&w.get_display(), "default").as_ref()); + let w = gtk::traits::TextViewExt::window(win, gtk::TextWindowType::Text).unwrap(); + w.set_cursor(gdk::Cursor::from_name(&w.display(), "default").as_ref()); Inhibit(false) }); self.window.show_all(); diff --git a/src/main.rs b/src/main.rs index 6557411..bb35339 100644 --- a/src/main.rs +++ b/src/main.rs @@ -46,7 +46,7 @@ fn main() { .expect("Failed to load CSS"); gtk::StyleContext::add_provider_for_screen( - &gdk::Screen::get_default().expect("Error initializing gtk css provider."), + &gdk::Screen::default().expect("Error initializing gtk css provider."), &provider, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION, ); @@ -101,7 +101,7 @@ fn main() { let gui_clone = gui.clone(); let url_bar = gui.url_bar(); url_bar.connect_activate(move |b| { - let url = b.get_text().expect("get_text failed").to_string(); + let url = b.text().to_string(); route_url(&gui_clone, url) }); } @@ -111,7 +111,7 @@ fn main() { let gui_clone = gui.clone(); let content_view = gui.content_view(); content_view.connect_button_press_event(move |_, event| { - if event.get_button() == 8 { + if event.button() == 8 { go_back(&gui_clone); } Inhibit(false) @@ -190,26 +190,24 @@ fn visit(gui: &Arc<Gui>, url: &Url) { fn refresh(gui: &Arc<Gui>) { let url_bar = gui.url_bar(); - let url = url_bar.get_text().expect("get_text failed").to_string(); + let url = url_bar.text().to_string(); route_url(&gui, url) } fn update_url_field(gui: &Arc<Gui>, url: &str) { let url_bar = gui.url_bar(); - url_bar.get_buffer().set_text(url); + url_bar.buffer().set_text(url); } fn add_bookmark(gui: &Arc<Gui>) { let url_bar = gui.url_bar(); - let current_url = url_bar.get_text(); - - if let Some(url) = current_url { - if bookmarks::is_valid(&url) { - bookmarks::add(&url); - dialog::info(&gui, "Bookmark added."); - } else { - dialog::error(&gui, "Invalid bookmark URL."); - } + let current_url = url_bar.text(); + + if bookmarks::is_valid(¤t_url) { + bookmarks::add(¤t_url); + dialog::info(&gui, "Bookmark added."); + } else { + dialog::error(&gui, "Invalid bookmark URL."); } } @@ -354,8 +352,8 @@ pub fn visit_url<T: AbsoluteUrl + Protocol>(gui: &Arc<Gui>, url: T) { } fn clear_buffer(view: >k::TextView) { - if let Some(buffer) = view.get_buffer() { - let (mut start, mut end) = buffer.get_bounds(); + if let Some(buffer) = view.buffer() { + let (mut start, mut end) = buffer.bounds(); buffer.delete(&mut start, &mut end); } } base-commit: ec77c753e86074f9b540b0f41cfbec527b17ef0a -- 2.30.2