Skip to content

Commit d396c0a

Browse files
committed
correctly handle relative links in new tab, refatctor
1 parent 509817d commit d396c0a

File tree

1 file changed

+17
-38
lines changed

1 file changed

+17
-38
lines changed

src/tab.rs

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,25 @@ impl Tab {
160160
item.cache = Some(cache)
161161
}
162162
}
163-
pub fn open_new_tab(&self, _link: &str) -> Result<()> {
164-
// let url = self.parse_link(link)?;
165-
// FIXME: emit action
163+
pub fn handle_click(&self, x: f64, y: f64) -> Result<()> {
164+
let imp = self.imp();
165+
let draw_ctx = imp.draw_ctx.borrow();
166+
let text_view = &draw_ctx.as_ref().unwrap().text_view;
167+
let has_selection = text_view.buffer().has_selection();
168+
if has_selection {
169+
return Ok(());
170+
}
171+
let link = Self::extract_linkhandler(draw_ctx.as_ref().unwrap(), x, y)?;
172+
let url = self.parse_link(&link)?;
173+
self.spawn_open_url(url);
166174
Ok(())
167175
}
168176
fn handle_right_click(&self, x: f64, y: f64) -> Result<()> {
169177
let imp = self.imp();
170178
let draw_ctx = imp.draw_ctx.borrow();
171179
let text_view = &draw_ctx.as_ref().unwrap().text_view;
172180
let link = Self::extract_linkhandler(draw_ctx.as_ref().unwrap(), x, y)?;
181+
let link = self.parse_link(&link)?;
173182

174183
let menu = gio::Menu::new();
175184
menu.insert(
@@ -185,7 +194,7 @@ impl Tab {
185194
text_view.set_extra_menu(Some(&menu));
186195
Ok(())
187196
}
188-
fn spawn_req(&self, fut: impl Future<Output = ()> + 'static) {
197+
fn spawn_request(&self, fut: impl Future<Output = ()> + 'static) {
189198
let imp = self.imp();
190199
imp.req_handle
191200
.replace(Some(glibctx().spawn_local_with_handle(fut).unwrap()));
@@ -208,7 +217,7 @@ impl Tab {
208217

209218
let this = self.clone();
210219
let fut = async move {
211-
match Self::spawn_request(&mut req_ctx).await {
220+
match Self::send_request(&mut req_ctx).await {
212221
Ok(Some(cache)) => {
213222
this.add_cache(cache);
214223
info!("Page loaded and cached ({})", url.clone());
@@ -225,7 +234,7 @@ impl Tab {
225234
this.emit_by_name_with_values("progress-changed", &[1.0.to_value()]);
226235
};
227236
self.emit_by_name_with_values("progress-changed", &[0.3.to_value()]);
228-
self.spawn_req(fut);
237+
self.spawn_request(fut);
229238
}
230239
fn spawn_open_history(&self, item: HistoryItem) {
231240
let HistoryItem { url, cache, .. } = item;
@@ -258,7 +267,7 @@ impl Tab {
258267
Err(e) => Self::display_error(&mut draw_ctx, e),
259268
}
260269
};
261-
self.spawn_req(fut);
270+
self.spawn_request(fut);
262271
}
263272
pub fn back(&self) -> Result<()> {
264273
let imp = self.imp();
@@ -281,36 +290,6 @@ impl Tab {
281290
let error_text = format!("Geopard experienced an error:\n {:?}", error);
282291
ctx.insert_paragraph(&mut ctx.text_buffer.end_iter(), &error_text);
283292
}
284-
pub fn handle_click(&self, x: f64, y: f64) -> Result<()> {
285-
let imp = self.imp();
286-
let draw_ctx = imp.draw_ctx.borrow();
287-
let text_view = &draw_ctx.as_ref().unwrap().text_view;
288-
let has_selection = text_view.buffer().has_selection();
289-
if has_selection {
290-
return Ok(());
291-
}
292-
let link = Self::extract_linkhandler(draw_ctx.as_ref().unwrap(), x, y)?;
293-
let url = self.parse_link(&link)?;
294-
self.spawn_open_url(url);
295-
Ok(())
296-
}
297-
/* FIXME: fn extend_textview_menu(menu: &gtk::Menu, url: String, sender: flume::Sender<TabMsg>) {
298-
let copy_link_item = gtk::MenuItem::with_label("Copy link");
299-
let open_in_tab_item = gtk::MenuItem::with_label("Open in new tab");
300-
let url_clone = url.clone();
301-
let sender_clone = sender.clone();
302-
copy_link_item.connect_activate(move |_| {
303-
sender_clone
304-
.send(TabMsg::CopyUrl(url_clone.clone()))
305-
.unwrap();
306-
});
307-
open_in_tab_item.connect_activate(move |_| {
308-
sender.send(TabMsg::OpenNewTab(url.clone())).unwrap();
309-
});
310-
menu.prepend(&copy_link_item);
311-
menu.prepend(&open_in_tab_item);
312-
menu.show_all();
313-
}*/
314293
fn bind_signals(&self) {
315294
let imp = self.imp();
316295
let this = self.clone();
@@ -367,7 +346,7 @@ impl Tab {
367346
}
368347
Ok(())
369348
}
370-
async fn spawn_request(req: &mut RequestCtx) -> Result<Option<Vec<u8>>> {
349+
async fn send_request(req: &mut RequestCtx) -> Result<Option<Vec<u8>>> {
371350
req.draw_ctx.clear();
372351
match req.url.scheme() {
373352
"about" => {

0 commit comments

Comments
 (0)