Browse Source

fractal-gtk: Port to libhandy-1

Ports our UI to the now-stable libhandy-1. libhandy-1 comes
with a few improvements, but also some API breakages
that needed to be fixed up.
fix-filtering
Christopher Davis 6 years ago
parent
commit
438e846ba2
  1. 10
      Cargo.lock
  2. 3
      flatpak/org.gnome.Fractal.json
  3. 3
      fractal-gtk/Cargo.toml
  4. 2
      fractal-gtk/res/ui/direct_chat.ui
  5. 2
      fractal-gtk/res/ui/invite_user.ui
  6. 2
      fractal-gtk/res/ui/join_room.ui
  7. 12
      fractal-gtk/res/ui/main_window.ui
  8. 2
      fractal-gtk/res/ui/new_room.ui
  9. 6
      fractal-gtk/res/ui/room_settings.ui
  10. 2
      fractal-gtk/src/app/connect/direct.rs
  11. 24
      fractal-gtk/src/app/connect/directory.rs
  12. 2
      fractal-gtk/src/app/connect/invite.rs
  13. 2
      fractal-gtk/src/app/connect/join_room.rs
  14. 2
      fractal-gtk/src/app/connect/new_room.rs
  15. 20
      fractal-gtk/src/app/mod.rs
  16. 17
      fractal-gtk/src/appop/directory.rs
  17. 6
      fractal-gtk/src/appop/invite.rs
  18. 4
      fractal-gtk/src/appop/room.rs
  19. 4
      fractal-gtk/src/appop/start_chat.rs
  20. 2
      fractal-gtk/src/uibuilder.rs
  21. 18
      fractal-gtk/src/widgets/scroll_widget.rs
  22. 18
      fractal-gtk/src/widgets/sourceview_entry.rs
  23. 2
      meson.build
  24. 10
      subprojects/libhandy.wrap

10
Cargo.lock generated

@ -1441,9 +1441,9 @@ checksum = "755456fae044e6fa1ebbbd1b3e902ae19e73097ed4ed87bb79934a867c007bc3"
[[package]]
name = "libhandy"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d2aae364d9dc15598dbf1b3b5c1ac7857034bad622f8817002439125c9869a7"
checksum = "ce64d9c1f9e9444fb1175cf65cb6db9b55e7ae5f9a44140202da05784a7cdf33"
dependencies = [
"bitflags",
"gdk",
@ -1463,11 +1463,12 @@ dependencies = [
[[package]]
name = "libhandy-sys"
version = "0.6.0"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01bb81849945cacdf8f8f0db8e4be16d5bd72a8d673d9b9691cbe0b7c5364412"
checksum = "0017044b92ade6704a301212feea9e754be62f58d39d01aae8fcf2c1a982e3d9"
dependencies = [
"gdk",
"gdk-pixbuf-sys",
"gdk-sys",
"gio",
"gio-sys",
@ -1477,6 +1478,7 @@ dependencies = [
"libc",
"pango-sys",
"pkg-config",
"system-deps",
]
[[package]]

3
flatpak/org.gnome.Fractal.json

@ -59,8 +59,7 @@
"sources" : [
{
"type" : "git",
"url" : "https://source.puri.sm/Librem5/libhandy.git",
"tag" : "v0.0.13"
"url" : "https://gitlab.gnome.org/GNOME/libhandy.git"
}
]
},

3
fractal-gtk/Cargo.toml

@ -53,8 +53,7 @@ path = "../fractal-matrix-api"
package = "fractal-matrix-api"
[dependencies.libhandy]
version = "0.6.0"
features = ["v0_0_10"]
version = "0.7.0"
[dependencies.gettext-rs]
git = "https://github.com/danigm/gettext-rs"

2
fractal-gtk/res/ui/direct_chat.ui

@ -3,7 +3,7 @@
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="HdyDialog" id="direct_chat_dialog">
<object class="GtkDialog" id="direct_chat_dialog">
<property name="default_width">400</property>
<property name="height_request">300</property>
<property name="can_focus">False</property>

2
fractal-gtk/res/ui/invite_user.ui

@ -3,7 +3,7 @@
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="HdyDialog" id="invite_user_dialog">
<object class="GtkDialog" id="invite_user_dialog">
<property name="default_width">400</property>
<property name="height_request">300</property>
<property name="can_focus">False</property>

2
fractal-gtk/res/ui/join_room.ui

@ -3,7 +3,7 @@
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="HdyDialog" id="join_room_dialog">
<object class="GtkDialog" id="join_room_dialog">
<property name="can_focus">False</property>
<property name="modal">True</property>
<property name="window_position">center</property>

12
fractal-gtk/res/ui/main_window.ui

@ -97,9 +97,6 @@
<class name="sidebar"/>
</style>
</object>
<packing>
<property name="allow-visible">False</property>
</packing>
</child>
<child>
<object class="GtkOverlay" id="inapp">
@ -485,9 +482,6 @@
<class name="sidebar"/>
</style>
</object>
<packing>
<property name="allow-visible">False</property>
</packing>
</child>
<child>
<object class="GtkHeaderBar" id="room_header_bar"> <!--right titlebar-->
@ -665,11 +659,11 @@
</object>
</child>
<child type="title">
<object class="HdyColumn">
<object class="HdyClamp">
<property name="can_focus">False</property>
<property name="visible">True</property>
<property name="maximum_width">288</property>
<property name="linear_growth_width">288</property>
<property name="maximum_size">288</property>
<property name="tightening_threshold">288</property>
<child>
<object class="GtkSearchEntry" id="directory_search_entry">
<property name="visible">True</property>

2
fractal-gtk/res/ui/new_room.ui

@ -20,7 +20,7 @@
</row>
</data>
</object>
<object class="HdyDialog" id="new_room_dialog">
<object class="GtkDialog" id="new_room_dialog">
<property name="can_focus">False</property>
<property name="modal">True</property>
<property name="window_position">center</property>

6
fractal-gtk/res/ui/room_settings.ui

@ -21,10 +21,10 @@
<property name="can_focus">False</property>
<property name="margin">18</property>
<child>
<object class="HdyColumn">
<object class="HdyClamp">
<property name="visible">True</property>
<property name="maximum-width">600</property>
<property name="linear-growth-width">600</property>
<property name="maximum_size">600</property>
<property name="tightening_threshold">600</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>

2
fractal-gtk/src/app/connect/direct.rs

@ -33,7 +33,7 @@ impl App {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("direct_chat_dialog")
.get_object::<gtk::Dialog>("direct_chat_dialog")
.expect("Can't find direct_chat_dialog in ui file.");
if let Some(buffer) = to_chat_entry.get_buffer() {

24
fractal-gtk/src/app/connect/directory.rs

@ -3,7 +3,7 @@ use glib::clone;
use crate::util::i18n::i18n;
use gtk::prelude::*;
use libhandy::{Column, ColumnExt};
use libhandy::prelude::*;
use crate::app::App;
use crate::appop::RoomSearchPagination;
@ -22,32 +22,32 @@ impl App {
.get_object::<gtk::Stack>("directory_stack")
.expect("Can't find directory_stack in ui file.");
let column = Column::new();
let clamp = libhandy::Clamp::new();
let listbox = gtk::ListBox::new();
column.set_maximum_width(800);
column.set_hexpand(true);
column.set_vexpand(true);
column.set_margin_top(24);
column.set_margin_start(12);
column.set_margin_end(12);
clamp.set_maximum_size(800);
clamp.set_hexpand(true);
clamp.set_vexpand(true);
clamp.set_margin_top(24);
clamp.set_margin_start(12);
clamp.set_margin_end(12);
let frame = gtk::Frame::new(None);
frame.set_shadow_type(gtk::ShadowType::In);
frame.add(&listbox);
frame.get_style_context().add_class("room-directory");
column.add(&frame);
clamp.add(&frame);
listbox.show();
frame.show();
column.show();
directory_stack.add_named(&column, "directory_column");
clamp.show();
directory_stack.add_named(&clamp, "directory_clamp");
self.ui
.builder
.expose_object::<gtk::ListBox>("directory_room_list", &listbox);
self.ui
.builder
.expose_object::<Column>("directory_column", &column);
.expose_object::<libhandy::Clamp>("directory_clamp", &clamp);
let directory_choice_label = self
.ui

2
fractal-gtk/src/app/connect/invite.rs

@ -67,7 +67,7 @@ impl App {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("invite_user_dialog")
.get_object::<gtk::Dialog>("invite_user_dialog")
.expect("Can't find invite_user_dialog in ui file.");
if let Some(buffer) = invite_entry.get_buffer() {

2
fractal-gtk/src/app/connect/join_room.rs

@ -8,7 +8,7 @@ impl App {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("join_room_dialog")
.get_object::<gtk::Dialog>("join_room_dialog")
.expect("Can't find join_room_dialog in ui file.");
let cancel = self
.ui

2
fractal-gtk/src/app/connect/new_room.rs

@ -8,7 +8,7 @@ impl App {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("new_room_dialog")
.get_object::<gtk::Dialog>("new_room_dialog")
.expect("Can't find new_room_dialog in ui file.");
let cancel = self
.ui

20
fractal-gtk/src/app/mod.rs

@ -109,22 +109,18 @@ impl App {
.get_object::<gtk::Popover>("autocomplete_popover")
.expect("Can't find autocomplete_popover in ui file.");
if let libhandy::Fold::Folded = leaflet.get_fold() {
if leaflet.get_folded() {
container.get_style_context().add_class("folded-history");
popover.get_style_context().add_class("narrow");
}
leaflet.connect_property_fold_notify(clone!(@weak container => move |leaflet| {
match leaflet.get_fold() {
libhandy::Fold::Folded => {
container.get_style_context().add_class("folded-history");
popover.get_style_context().add_class("narrow");
}
libhandy::Fold::Unfolded => {
container.get_style_context().remove_class("folded-history");
popover.get_style_context().remove_class("narrow");
}
_ => (),
leaflet.connect_property_folded_notify(clone!(@weak container => move |leaflet| {
if leaflet.get_folded() {
container.get_style_context().add_class("folded-history");
popover.get_style_context().add_class("narrow");
} else {
container.get_style_context().remove_class("folded-history");
popover.get_style_context().remove_class("narrow");
}
}));

17
fractal-gtk/src/appop/directory.rs

@ -1,5 +1,4 @@
use gtk::prelude::*;
use libhandy::Column;
use std::thread;
use crate::backend::{directory, HandleError};
@ -178,12 +177,12 @@ impl AppOp {
.builder
.get_object::<gtk::Stack>("directory_stack")
.expect("Can't find directory_stack in ui file.");
let directory_column = self
let directory_clamp = self
.ui
.builder
.get_object::<Column>("directory_column")
.expect("Can't find directory_column in ui file.");
directory_stack.set_visible_child(&directory_column);
.get_object::<libhandy::Clamp>("directory_clamp")
.expect("Can't find directory_clamp in ui file.");
directory_stack.set_visible_child(&directory_clamp);
let mut sorted_rooms = rooms;
sorted_rooms.sort_by_key(|a| -a.n_members);
@ -216,11 +215,11 @@ impl AppOp {
.builder
.get_object::<gtk::Stack>("directory_stack")
.expect("Can't find directory_stack in ui file.");
let directory_column = self
let directory_clamp = self
.ui
.builder
.get_object::<Column>("directory_column")
.expect("Can't find directory_column in ui file.");
directory_stack.set_visible_child(&directory_column);
.get_object::<libhandy::Clamp>("directory_clamp")
.expect("Can't find directory_clamp in ui file.");
directory_stack.set_visible_child(&directory_clamp);
}
}

6
fractal-gtk/src/appop/invite.rs

@ -111,7 +111,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>(dialogid)
.get_object::<gtk::Dialog>(dialogid)
.expect("Can’t find invite_user_dialog in ui file.");
dialog.resize(300, 200);
@ -130,7 +130,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("invite_user_dialog")
.get_object::<gtk::Dialog>("invite_user_dialog")
.expect("Can't find invite_user_dialog in ui file.");
let scroll = self
.ui
@ -199,7 +199,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("invite_user_dialog")
.get_object::<gtk::Dialog>("invite_user_dialog")
.expect("Can't find invite_user_dialog in ui file.");
self.invite_list = vec![];

4
fractal-gtk/src/appop/room.rs

@ -506,7 +506,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("new_room_dialog")
.get_object::<gtk::Dialog>("new_room_dialog")
.expect("Can't find new_room_dialog in ui file.");
let btn = self
.ui
@ -521,7 +521,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("join_room_dialog")
.get_object::<gtk::Dialog>("join_room_dialog")
.expect("Can't find join_room_dialog in ui file.");
if let Some(btn) = self
.ui

4
fractal-gtk/src/appop/start_chat.rs

@ -40,7 +40,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("direct_chat_dialog")
.get_object::<gtk::Dialog>("direct_chat_dialog")
.expect("Can't find direct_chat_dialog in ui file.");
let scroll = self
.ui
@ -83,7 +83,7 @@ impl AppOp {
let dialog = self
.ui
.builder
.get_object::<libhandy::Dialog>("direct_chat_dialog")
.get_object::<gtk::Dialog>("direct_chat_dialog")
.expect("Can't find direct_chat_dialog in ui file.");
self.invite_list = vec![];

2
fractal-gtk/src/uibuilder.rs

@ -47,7 +47,7 @@ impl UI {
let sventry_stack = gtk::Stack::new();
let sventry = SVEntry::default();
sventry_stack.add_named(&sventry.column, "Text Entry");
sventry_stack.add_named(&sventry.clamp, "Text Entry");
let sventry_disabled = gtk::Label::new(Some(&i18n(
"You don’t have permission to post to this room",
)));

18
fractal-gtk/src/widgets/scroll_widget.rs

@ -8,7 +8,7 @@ use glib::clone;
use glib::source::Continue;
use gtk::prelude::*;
use libhandy::ColumnExt;
use libhandy::prelude::*;
// This really requires to opt-out of the lint
#[allow(dead_code)]
@ -58,11 +58,11 @@ impl Widgets {
// Create the listbox insteate of the following line
//let messages = self.op.lock().unwrap().message_box.clone();
let messages = gtk::ListBox::new();
let column = libhandy::Column::new();
column.set_maximum_width(800);
column.set_linear_growth_width(600);
column.set_hexpand(true);
column.set_vexpand(true);
let clamp = libhandy::Clamp::new();
clamp.set_maximum_size(800);
clamp.set_tightening_threshold(600);
clamp.set_hexpand(true);
clamp.set_vexpand(true);
let typing_label = gtk::Label::new(None);
typing_label.show();
@ -79,14 +79,14 @@ impl Widgets {
column_box.add(&messages);
column_box.add(&typing_label);
column_box.show();
column.add(&column_box);
column.show();
clamp.add(&column_box);
clamp.show();
messages.get_style_context().add_class("messages-history");
messages.show();
container.get_style_context().add_class("messages-box");
container.add(&column);
container.add(&clamp);
if let Some(adj) = view.get_vadjustment() {
if let Some(child) = view.get_child() {

18
fractal-gtk/src/widgets/sourceview_entry.rs

@ -1,12 +1,12 @@
use gtk::prelude::*;
use libhandy::{Column, ColumnExt};
use libhandy::prelude::*;
use sourceview4::ViewExt;
// This alias is necessary to avoid conflict with gtk's TextViewExt
use gspell::TextViewExt as GspellTextViewExt;
#[derive(Debug, Clone)]
pub struct SVEntry {
pub column: Column,
pub clamp: libhandy::Clamp,
pub container: gtk::Box,
pub attach: gtk::Button,
pub markdown: gtk::MenuButton,
@ -20,10 +20,10 @@ pub struct SVEntry {
impl Default for SVEntry {
fn default() -> Self {
let column = Column::new();
column.set_maximum_width(800);
column.set_linear_growth_width(600);
column.set_vexpand(false);
let clamp = libhandy::Clamp::new();
clamp.set_maximum_size(800);
clamp.set_tightening_threshold(600);
clamp.set_vexpand(false);
let container = gtk::Box::new(gtk::Orientation::Horizontal, 6);
container.set_vexpand(false);
@ -92,11 +92,11 @@ impl Default for SVEntry {
container.pack_start(&entry_box, false, true, 0);
container.pack_start(&send, false, false, 0);
column.add(&container);
column.show_all();
clamp.add(&container);
clamp.show_all();
SVEntry {
column,
clamp,
container,
attach,
markdown,

2
meson.build

@ -12,7 +12,7 @@ dependency('gio-2.0', version: '>= 2.56')
dependency('cairo', version: '>= 1.16')
dependency('gdk-pixbuf-2.0')
dependency('gtk+-3.0', version: '>= 3.24.7')
dependency('libhandy-0.0', version: '>= 0.0.13', fallback: ['libhandy', 'libhandy_dep'])
dependency('libhandy-1', version: '>= 1.0.0', fallback: ['libhandy', 'libhandy_dep'])
dependency('gtksourceview-4', version: '>= 4.0')
dependency('gspell-1', version: '>= 1.8')

10
subprojects/libhandy.wrap

@ -1,6 +1,4 @@
[wrap-file]
directory = libhandy-v0.0.13
source_url = https://source.puri.sm/Librem5/libhandy/-/archive/v0.0.13/libhandy-v0.0.13.tar.bz2
source_filename = libhandy-v0.0.13.tar.bz2
source_hash = 507f92e173a6ab9c07f612d2758de434f1feeb72ca4a9dd7de16d9a2b533d60b
[wrap-git]
directory = libhandy
url=https://gitlab.gnome.org/GNOME/libhandy.git
revision=origin/master

Loading…
Cancel
Save