From f44cbe02c17df1f02ad49c63cd784fec0ea02d85 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Sat, 14 May 2022 14:45:59 +0200 Subject: Improve Gtk4 port --- .../src/ui/call_window/audio_settings_popover.vala | 44 ++++++++--------- main/src/ui/call_window/call_bottom_bar.vala | 57 ++++++++++++---------- .../call_connection_details_window.vala | 30 ++++++------ .../src/ui/call_window/call_encryption_button.vala | 28 +++++------ main/src/ui/call_window/call_window.vala | 27 +++++----- .../src/ui/call_window/call_window_controller.vala | 9 ++-- main/src/ui/call_window/participant_widget.vala | 31 +++++++----- .../src/ui/call_window/video_settings_popover.vala | 24 ++++----- 8 files changed, 131 insertions(+), 119 deletions(-) (limited to 'main/src/ui/call_window') diff --git a/main/src/ui/call_window/audio_settings_popover.vala b/main/src/ui/call_window/audio_settings_popover.vala index f5af90ff..f66c5eee 100644 --- a/main/src/ui/call_window/audio_settings_popover.vala +++ b/main/src/ui/call_window/audio_settings_popover.vala @@ -14,7 +14,7 @@ public class Dino.Ui.AudioSettingsPopover : Gtk.Popover { private HashMap row_speaker_device = new HashMap(); public AudioSettingsPopover() { - Box box = new Box(Orientation.VERTICAL, 15) { visible=true }; + Box box = new Box(Orientation.VERTICAL, 15); box.append(create_microphone_box()); box.append(create_speaker_box()); @@ -25,19 +25,19 @@ public class Dino.Ui.AudioSettingsPopover : Gtk.Popover { Plugins.VideoCallPlugin call_plugin = Dino.Application.get_default().plugin_registry.video_call_plugin; Gee.List devices = call_plugin.get_devices("audio", false); - Box micro_box = new Box(Orientation.VERTICAL, 10) { visible=true }; - micro_box.append(new Label("" + _("Microphones") + "") { use_markup=true, xalign=0, visible=true, can_focus=true /* grab initial focus*/ }); + Box micro_box = new Box(Orientation.VERTICAL, 10); + micro_box.append(new Label("" + _("Microphones") + "") { use_markup=true, xalign=0, can_focus=true /* grab initial focus*/ }); if (devices.size == 0) { micro_box.append(new Label(_("No microphone found."))); } else { - ListBox micro_list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE, visible=true }; + ListBox micro_list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE }; micro_list_box.set_header_func(listbox_header_func); - Frame micro_frame = new Frame(null) { visible=true }; + Frame micro_frame = new Frame(null); micro_frame.set_child(micro_list_box); foreach (Plugins.MediaDevice device in devices) { - Label display_name_label = new Label(device.display_name) { xalign=0, visible=true }; - Image image = new Image.from_icon_name("object-select-symbolic") { visible=true }; + Label display_name_label = new Label(device.display_name) { xalign=0 }; + Image image = new Image.from_icon_name("object-select-symbolic"); if (current_microphone_device == null || current_microphone_device.id != device.id) { image.opacity = 0; } @@ -48,19 +48,19 @@ public class Dino.Ui.AudioSettingsPopover : Gtk.Popover { image.opacity = 1; } }); - Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7, visible=true }; + Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7 }; device_box.append(image); - Box label_box = new Box(Orientation.VERTICAL, 0) { visible = true }; + Box label_box = new Box(Orientation.VERTICAL, 0); label_box.append(display_name_label); if (device.detail_name != null) { - Label detail_name_label = new Label(device.detail_name) { xalign=0, visible=true }; - detail_name_label.get_style_context().add_class("dim-label"); + Label detail_name_label = new Label(device.detail_name) { xalign=0 }; + detail_name_label.add_css_class("dim-label"); detail_name_label.attributes = new Pango.AttrList(); detail_name_label.attributes.insert(Pango.attr_scale_new(0.8)); label_box.append(detail_name_label); } device_box.append(label_box); - ListBoxRow list_box_row = new ListBoxRow() { visible=true }; + ListBoxRow list_box_row = new ListBoxRow(); list_box_row.set_child(device_box); micro_list_box.append(list_box_row); @@ -81,22 +81,22 @@ public class Dino.Ui.AudioSettingsPopover : Gtk.Popover { Plugins.VideoCallPlugin call_plugin = Dino.Application.get_default().plugin_registry.video_call_plugin; Gee.List devices = call_plugin.get_devices("audio", true); - Box speaker_box = new Box(Orientation.VERTICAL, 10) { visible=true }; - speaker_box.append(new Label("" + _("Speakers") +"") { use_markup=true, xalign=0, visible=true }); + Box speaker_box = new Box(Orientation.VERTICAL, 10); + speaker_box.append(new Label("" + _("Speakers") +"") { use_markup=true, xalign=0 }); if (devices.size == 0) { speaker_box.append(new Label(_("No speaker found."))); } else { - ListBox speaker_list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE, visible=true }; + ListBox speaker_list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE }; speaker_list_box.set_header_func(listbox_header_func); speaker_list_box.row_selected.connect((row) => { }); - Frame speaker_frame = new Frame(null) { visible=true }; + Frame speaker_frame = new Frame(null); speaker_frame.set_child(speaker_list_box); foreach (Plugins.MediaDevice device in devices) { - Label display_name_label = new Label(device.display_name) { xalign=0, visible=true }; - Image image = new Image.from_icon_name("object-select-symbolic") { visible=true }; + Label display_name_label = new Label(device.display_name) { xalign=0 }; + Image image = new Image.from_icon_name("object-select-symbolic"); if (current_speaker_device == null || current_speaker_device.id != device.id) { image.opacity = 0; } @@ -107,19 +107,19 @@ public class Dino.Ui.AudioSettingsPopover : Gtk.Popover { image.opacity = 1; } }); - Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7, visible=true }; + Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7 }; device_box.append(image); Box label_box = new Box(Orientation.VERTICAL, 0) { visible = true }; label_box.append(display_name_label); if (device.detail_name != null) { - Label detail_name_label = new Label(device.detail_name) { xalign=0, visible=true }; - detail_name_label.get_style_context().add_class("dim-label"); + Label detail_name_label = new Label(device.detail_name) { xalign=0 }; + detail_name_label.add_css_class("dim-label"); detail_name_label.attributes = new Pango.AttrList(); detail_name_label.attributes.insert(Pango.attr_scale_new(0.8)); label_box.append(detail_name_label); } device_box.append(label_box); - ListBoxRow list_box_row = new ListBoxRow() { visible=true }; + ListBoxRow list_box_row = new ListBoxRow(); list_box_row.set_child(device_box); speaker_list_box.append(list_box_row); diff --git a/main/src/ui/call_window/call_bottom_bar.vala b/main/src/ui/call_window/call_bottom_bar.vala index ddc196f2..c30a86e9 100644 --- a/main/src/ui/call_window/call_bottom_bar.vala +++ b/main/src/ui/call_window/call_bottom_bar.vala @@ -11,52 +11,54 @@ public class Dino.Ui.CallBottomBar : Gtk.Box { public string counterpart_display_name { get; set; } - private Button audio_button = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START, visible=true }; - private Overlay audio_button_overlay = new Overlay() { visible=true }; + private Button audio_button = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START }; + private Overlay audio_button_overlay = new Overlay(); private Image audio_image = new Image() { pixel_size=22 }; - private MenuButton audio_settings_button = new MenuButton() { icon_name="go-up-symbolic", halign=Align.END, valign=Align.END }; + private MenuButton audio_settings_button = new MenuButton() { halign=Align.END, valign=Align.END }; public AudioSettingsPopover? audio_settings_popover; - private Button video_button = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START, visible=true }; - private Overlay video_button_overlay = new Overlay() { visible=true }; + private Button video_button = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START }; + private Overlay video_button_overlay = new Overlay(); private Image video_image = new Image() { pixel_size=22 }; - private MenuButton video_settings_button = new MenuButton() { icon_name="go-up-symbolic", halign=Align.END, valign=Align.END }; + private MenuButton video_settings_button = new MenuButton() { halign=Align.END, valign=Align.END }; public VideoSettingsPopover? video_settings_popover; - private Label label = new Label("") { halign=Align.CENTER, valign=Align.CENTER, wrap=true, wrap_mode=Pango.WrapMode.WORD_CHAR, hexpand=true, visible=true }; - private Stack stack = new Stack() { visible=true }; + private Label label = new Label("") { halign=Align.CENTER, valign=Align.CENTER, wrap=true, wrap_mode=Pango.WrapMode.WORD_CHAR, hexpand=true }; + private Stack stack = new Stack(); public CallBottomBar() { Object(orientation:Orientation.HORIZONTAL, spacing:0); - Box main_buttons = new Box(Orientation.HORIZONTAL, 20) { margin_start=40, margin_end=40, margin_bottom=20, margin_top=20, halign=Align.CENTER, hexpand=true, visible=true }; + Box main_buttons = new Box(Orientation.HORIZONTAL, 20) { margin_start=40, margin_end=40, margin_bottom=20, margin_top=20, halign=Align.CENTER, hexpand=true }; audio_button.set_child(audio_image); - audio_button.get_style_context().add_class("call-button"); + audio_button.add_css_class("call-button"); audio_button.clicked.connect(() => { audio_enabled = !audio_enabled; }); audio_button.margin_end = audio_button.margin_bottom = 5; // space for the small settings button audio_button_overlay.set_child(audio_button); audio_button_overlay.add_overlay(audio_settings_button); - audio_settings_button.get_style_context().add_class("call-mediadevice-settings-button"); + audio_settings_button.set_child(new Image.from_icon_name("go-up-symbolic") { pixel_size=10 }); + audio_settings_button.add_css_class("call-mediadevice-settings-button"); main_buttons.append(audio_button_overlay); video_button.set_child(video_image); - video_button.get_style_context().add_class("call-button"); + video_button.add_css_class("call-button"); video_button.clicked.connect(() => { video_enabled = !video_enabled; }); video_button.margin_end = video_button.margin_bottom = 5; video_button_overlay.set_child(video_button); video_button_overlay.add_overlay(video_settings_button); - video_settings_button.get_style_context().add_class("call-mediadevice-settings-button"); + video_settings_button.set_child(new Image.from_icon_name("go-up-symbolic") { pixel_size=10 }); + video_settings_button.add_css_class("call-mediadevice-settings-button"); main_buttons.append(video_button_overlay); - Button button_hang = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START, visible=true }; + Button button_hang = new Button() { height_request=45, width_request=45, halign=Align.START, valign=Align.START }; button_hang.set_child(new Image() { icon_name="dino-phone-hangup-symbolic", pixel_size=22 }); - button_hang.get_style_context().add_class("call-button"); - button_hang.get_style_context().add_class("destructive-action"); + button_hang.add_css_class("call-button"); + button_hang.add_css_class("destructive-action"); button_hang.clicked.connect(() => hang_up()); main_buttons.append(button_hang); - label.get_style_context().add_class("text-no-controls"); + label.add_css_class("text-no-controls"); stack.add_named(main_buttons, "control-buttons"); stack.add_named(label, "label"); @@ -71,7 +73,7 @@ public class Dino.Ui.CallBottomBar : Gtk.Box { on_audio_enabled_changed(); on_video_enabled_changed(); - this.get_style_context().add_class("call-bottom-bar"); + this.add_css_class("call-bottom-bar"); } public AudioSettingsPopover? show_audio_device_choices(bool show) { @@ -112,25 +114,25 @@ public class Dino.Ui.CallBottomBar : Gtk.Box { public void on_audio_enabled_changed() { if (audio_enabled) { audio_image.icon_name = "dino-microphone-symbolic"; - audio_button.get_style_context().add_class("white-button"); - audio_button.get_style_context().remove_class("transparent-white-button"); + audio_button.add_css_class("white-button"); + audio_button.remove_css_class("transparent-white-button"); } else { audio_image.icon_name = "dino-microphone-off-symbolic"; - audio_button.get_style_context().remove_class("white-button"); - audio_button.get_style_context().add_class("transparent-white-button"); + audio_button.remove_css_class("white-button"); + audio_button.add_css_class("transparent-white-button"); } } public void on_video_enabled_changed() { if (video_enabled) { video_image.icon_name = "dino-video-symbolic"; - video_button.get_style_context().add_class("white-button"); - video_button.get_style_context().remove_class("transparent-white-button"); + video_button.add_css_class("white-button"); + video_button.remove_css_class("transparent-white-button"); } else { video_image.icon_name = "dino-video-off-symbolic"; - video_button.get_style_context().remove_class("white-button"); - video_button.get_style_context().add_class("transparent-white-button"); + video_button.remove_css_class("white-button"); + video_button.add_css_class("transparent-white-button"); } } @@ -140,6 +142,7 @@ public class Dino.Ui.CallBottomBar : Gtk.Box { } public bool is_menu_active() { - return video_settings_button.popover.visible || audio_settings_button.popover.visible; // TODO gtk4 does this work? check for null? + return (video_settings_button.popover != null && video_settings_button.popover.visible) || + (audio_settings_button.popover != null && audio_settings_button.popover.visible); } } \ No newline at end of file diff --git a/main/src/ui/call_window/call_connection_details_window.vala b/main/src/ui/call_window/call_connection_details_window.vala index 0905908c..9e9e1b3a 100644 --- a/main/src/ui/call_window/call_connection_details_window.vala +++ b/main/src/ui/call_window/call_connection_details_window.vala @@ -4,10 +4,10 @@ namespace Dino.Ui { public class CallConnectionDetailsWindow : Gtk.Window { - public Box box = new Box(Orientation.VERTICAL, 15) { halign=Align.CENTER, valign=Align.CENTER, visible=true }; + public Box box = new Box(Orientation.VERTICAL, 15) { halign=Align.CENTER, valign=Align.CENTER }; private bool video_added = false; - private CallContentDetails audio_details = new CallContentDetails("Audio") { visible=true }; + private CallContentDetails audio_details = new CallContentDetails("Audio"); private CallContentDetails video_details = new CallContentDetails("Video"); public CallConnectionDetailsWindow() { @@ -36,24 +36,24 @@ namespace Dino.Ui { public class CallContentDetails : Gtk.Grid { - public Label rtp_title = new Label("RTP") { xalign=0, visible=true }; - public Label rtcp_title = new Label("RTCP") { xalign=0, visible=true }; - public Label target_recv_title = new Label("Target receive bitrate") { xalign=0, visible=true }; - public Label target_send_title = new Label("Target send bitrate") { xalign=0, visible=true }; + public Label rtp_title = new Label("RTP") { xalign=0 }; + public Label rtcp_title = new Label("RTCP") { xalign=0 }; + public Label target_recv_title = new Label("Target receive bitrate") { xalign=0 }; + public Label target_send_title = new Label("Target send bitrate") { xalign=0 }; - public Label rtp_ready = new Label("?") { xalign=0, visible=true }; - public Label rtcp_ready = new Label("?") { xalign=0, visible=true }; - public Label sent_bps = new Label("?") { use_markup=true, xalign=0, visible=true }; - public Label recv_bps = new Label("?") { use_markup=true, xalign=0, visible=true }; - public Label codec = new Label("?") { xalign=0, visible=true }; - public Label target_receive_bitrate = new Label("n/a") { use_markup=true, xalign=0, visible=true }; - public Label target_send_bitrate = new Label("n/a") { use_markup=true, xalign=0, visible=true }; + public Label rtp_ready = new Label("?") { xalign=0 }; + public Label rtcp_ready = new Label("?") { xalign=0 }; + public Label sent_bps = new Label("?") { use_markup=true, xalign=0 }; + public Label recv_bps = new Label("?") { use_markup=true, xalign=0 }; + public Label codec = new Label("?") { xalign=0 }; + public Label target_receive_bitrate = new Label("n/a") { use_markup=true, xalign=0 }; + public Label target_send_bitrate = new Label("n/a") { use_markup=true, xalign=0 }; private PeerContentInfo? prev_info = null; private int row_at = 0; public CallContentDetails(string headline) { - attach(new Label("%s".printf(headline)) { use_markup=true, xalign=0, visible=true }, 0, row_at++, 1, 1); + attach(new Label("%s".printf(headline)) { use_markup=true, xalign=0 }, 0, row_at++, 1, 1); attach(rtp_title, 0, row_at, 1, 1); attach(rtp_ready, 1, row_at++, 1, 1); attach(rtcp_title, 0, row_at, 1, 1); @@ -104,7 +104,7 @@ namespace Dino.Ui { } private void put_row(string label) { - attach(new Label(label) { xalign=0, visible=true }, 0, row_at, 1, 1); + attach(new Label(label) { xalign=0 }, 0, row_at, 1, 1); } } } diff --git a/main/src/ui/call_window/call_encryption_button.vala b/main/src/ui/call_window/call_encryption_button.vala index 095db2b4..1b586f28 100644 --- a/main/src/ui/call_window/call_encryption_button.vala +++ b/main/src/ui/call_window/call_encryption_button.vala @@ -2,7 +2,7 @@ using Dino.Entities; using Gtk; using Pango; -public class Dino.Ui.CallEncryptionButtonController { +public class Dino.Ui.CallEncryptionButtonController : Object { private bool has_been_set = false; public bool controls_active { get; set; default=false; } @@ -21,10 +21,10 @@ public class Dino.Ui.CallEncryptionButtonController { public void set_icon(bool encrypted, string? icon_name) { if (encrypted) { button.icon_name = icon_name ?? "changes-prevent-symbolic"; - button.get_style_context().remove_class("unencrypted"); + button.remove_css_class("unencrypted"); } else { button.icon_name = icon_name ?? "changes-allow-symbolic"; - button.get_style_context().add_class("unencrypted"); + button.add_css_class("unencrypted"); } has_been_set = true; update_opacity(); @@ -35,23 +35,23 @@ public class Dino.Ui.CallEncryptionButtonController { button.set_popover(popover); if (audio_encryption == null) { - popover.set_child(new Label("This call is unencrypted.") { visible=true } ); + popover.set_child(new Label("This call is unencrypted.") ); return; } if (title != null && !show_keys) { - popover.set_child(new Label(title) { use_markup=true, visible=true } ); + popover.set_child(new Label(title) { use_markup=true } ); return; } - Box box = new Box(Orientation.VERTICAL, 10) { visible=true }; - box.append(new Label("%s".printf(title ?? "This call is end-to-end encrypted.")) { use_markup=true, xalign=0, visible=true }); + Box box = new Box(Orientation.VERTICAL, 10); + box.append(new Label("%s".printf(title ?? "This call is end-to-end encrypted.")) { use_markup=true, xalign=0 }); if (video_encryption == null) { box.append(create_media_encryption_grid(audio_encryption)); } else { - box.append(new Label("Audio") { use_markup=true, xalign=0, visible=true }); + box.append(new Label("Audio") { use_markup=true, xalign=0 }); box.append(create_media_encryption_grid(audio_encryption)); - box.append(new Label("Video") { use_markup=true, xalign=0, visible=true }); + box.append(new Label("Video") { use_markup=true, xalign=0 }); box.append(create_media_encryption_grid(video_encryption)); } popover.set_child(box); @@ -62,14 +62,14 @@ public class Dino.Ui.CallEncryptionButtonController { } private Grid create_media_encryption_grid(Xmpp.Xep.Jingle.ContentEncryption? encryption) { - Grid ret = new Grid() { row_spacing=3, column_spacing=5, visible=true }; + Grid ret = new Grid() { row_spacing=3, column_spacing=5 }; if (encryption.peer_key.length > 0) { - ret.attach(new Label("Peer call key") { xalign=0, visible=true }, 1, 2, 1, 1); - ret.attach(new Label("" + format_fingerprint(encryption.peer_key) + "") { use_markup=true, max_width_chars=25, ellipsize=EllipsizeMode.MIDDLE, xalign=0, hexpand=true, visible=true }, 2, 2, 1, 1); + ret.attach(new Label("Peer call key") { xalign=0 }, 1, 2, 1, 1); + ret.attach(new Label("" + format_fingerprint(encryption.peer_key) + "") { use_markup=true, max_width_chars=25, ellipsize=EllipsizeMode.MIDDLE, xalign=0, hexpand=true }, 2, 2, 1, 1); } if (encryption.our_key.length > 0) { - ret.attach(new Label("Your call key") { xalign=0, visible=true }, 1, 3, 1, 1); - ret.attach(new Label("" + format_fingerprint(encryption.our_key) + "") { use_markup=true, max_width_chars=25, ellipsize=EllipsizeMode.MIDDLE, xalign=0, hexpand=true, visible=true }, 2, 3, 1, 1); + ret.attach(new Label("Your call key") { xalign=0 }, 1, 3, 1, 1); + ret.attach(new Label("" + format_fingerprint(encryption.our_key) + "") { use_markup=true, max_width_chars=25, ellipsize=EllipsizeMode.MIDDLE, xalign=0, hexpand=true }, 2, 3, 1, 1); } return ret; } diff --git a/main/src/ui/call_window/call_window.vala b/main/src/ui/call_window/call_window.vala index cd05848a..cf89d8e8 100644 --- a/main/src/ui/call_window/call_window.vala +++ b/main/src/ui/call_window/call_window.vala @@ -11,13 +11,13 @@ namespace Dino.Ui { public CallWindowController controller; - public Overlay overlay = new Overlay() { visible=true }; - public Grid grid = new Grid() { visible=true }; - public CallBottomBar bottom_bar = new CallBottomBar() { visible=true }; - public Revealer bottom_bar_revealer = new Revealer() { valign=Align.END, transition_type=RevealerTransitionType.CROSSFADE, transition_duration=200, visible=true }; - public HeaderBar header_bar = new HeaderBar() { valign=Align.START, halign=Align.END, show_title_buttons=true, visible=true, opacity=0.0 }; - public Revealer header_bar_revealer = new Revealer() { halign=Align.END, valign=Align.START, transition_type=RevealerTransitionType.SLIDE_LEFT, transition_duration=200, visible=true, reveal_child=false }; - public Box own_video_box = new Box(Orientation.HORIZONTAL, 0) { halign=Align.END, valign=Align.END, visible=true }; + public Overlay overlay = new Overlay(); + public Grid grid = new Grid(); + public CallBottomBar bottom_bar = new CallBottomBar(); + public Revealer bottom_bar_revealer = new Revealer() { valign=Align.END, transition_type=RevealerTransitionType.CROSSFADE, transition_duration=200 }; + public HeaderBar header_bar = new HeaderBar() { valign=Align.START, halign=Align.END, show_title_buttons=true, opacity=0.0 }; + public Revealer header_bar_revealer = new Revealer() { halign=Align.END, valign=Align.START, transition_type=RevealerTransitionType.SLIDE_LEFT, transition_duration=200, reveal_child=false }; + public Box own_video_box = new Box(Orientation.HORIZONTAL, 0) { halign=Align.END, valign=Align.END }; private Widget? own_video = null; private HashMap participant_widgets = new HashMap(); private ArrayList participants = new ArrayList(); @@ -32,14 +32,14 @@ namespace Dino.Ui { public bool controls_active { get; set; default=true; } construct { - header_bar.get_style_context().add_class("call-header-bar"); + header_bar.add_css_class("call-header-bar"); header_bar.title_widget = new Box(Orientation.VERTICAL, 0); // header_bar.spacing = 0; header_bar_revealer.set_child(header_bar); bottom_bar_revealer.set_child(bottom_bar); - own_video_box.get_style_context().add_class("own-video"); + own_video_box.add_css_class("own-video"); - this.get_style_context().add_class("dino-call-window"); + this.add_css_class("dino-call-window"); overlay.set_child(grid); overlay.add_overlay(own_video_box); @@ -64,7 +64,7 @@ namespace Dino.Ui { this.notify["default-width"].connect(reposition_participant_widgets); this.notify["default-height"].connect(reposition_participant_widgets); - this.set_titlebar(new OutsideHeaderBar(this.header_bar) { visible=true }); + this.set_titlebar(new OutsideHeaderBar(this.header_bar)); reveal_control_elements(); } @@ -72,7 +72,7 @@ namespace Dino.Ui { public void add_participant(string participant, ParticipantWidget participant_widget) { participant_widget.visible = true; this.bind_property("controls-active", participant_widget, "controls-active", BindingFlags.SYNC_CREATE); - this.bind_property("controls-active", participant_widget.encryption_button, "controls-active", BindingFlags.SYNC_CREATE); + this.bind_property("controls-active", participant_widget.encryption_button_controller, "controls-active", BindingFlags.SYNC_CREATE); participants.add(participant); participant_widgets[participant] = participant_widget; @@ -153,8 +153,9 @@ namespace Dino.Ui { own_video = widget_; if (own_video == null) { - own_video = new Box(Orientation.HORIZONTAL, 0) { hexpand=true, vexpand=true }; + own_video = new Box(Orientation.HORIZONTAL, 0); } + own_video.hexpand = own_video.vexpand = true; own_video.visible = true; own_video_box.append(own_video); } diff --git a/main/src/ui/call_window/call_window_controller.vala b/main/src/ui/call_window/call_window_controller.vala index e3f8b670..e0eca6dc 100644 --- a/main/src/ui/call_window/call_window_controller.vala +++ b/main/src/ui/call_window/call_window_controller.vala @@ -134,10 +134,11 @@ public class Dino.Ui.CallWindowController : Object { warning("suspend inhibit request failed or unsupported"); } - call_window.destroy.connect(() => { + call_window.close_request.connect(() => { if (inhibit_cookie != 0) { app.uninhibit(inhibit_cookie); } + return false; }); } @@ -235,7 +236,7 @@ public class Dino.Ui.CallWindowController : Object { ParticipantWidget participant_widget = new ParticipantWidget(participant_name); participant_widget.may_show_invite_button = !participant_widgets.is_empty; participant_widget.debug_information_clicked.connect(() => { - var conn_details_window = new CallConnectionDetailsWindow() { title=participant_name, visible=true }; + var conn_details_window = new CallConnectionDetailsWindow() { title=participant_name }; conn_details_window.update_content(peer_states[participant_id].get_info()); uint timeout_handle_id = Timeout.add_seconds(1, () => { conn_details_window.update_content(peer_states[participant_id].get_info()); @@ -361,7 +362,9 @@ public class Dino.Ui.CallWindowController : Object { public override void dispose() { foreach (ulong handler_id in call_window_handler_ids) call_window.disconnect(handler_id); foreach (ulong handler_id in bottom_bar_handler_ids) call_window.bottom_bar.disconnect(handler_id); - participant_widgets.keys.@foreach((peer_id) => { remove_participant(peer_id); return true; }); + foreach (string peer_id in participant_widgets.keys) { + remove_participant(peer_id); + } call_window_handler_ids = bottom_bar_handler_ids = new ulong[0]; own_video.detach(); diff --git a/main/src/ui/call_window/participant_widget.vala b/main/src/ui/call_window/participant_widget.vala index ecd6cbb3..180923f1 100644 --- a/main/src/ui/call_window/participant_widget.vala +++ b/main/src/ui/call_window/participant_widget.vala @@ -10,15 +10,15 @@ namespace Dino.Ui { public Overlay overlay = new Overlay(); public Widget main_widget; - public HeaderBar header_bar = new HeaderBar() { valign=Align.START, visible=true }; + public HeaderBar header_bar = new HeaderBar() { valign=Align.START }; public Label title_label = new Label(""); public Label subtitle_label = new Label(""); - public Box inner_box = new Box(Orientation.HORIZONTAL, 0) { margin_start=5, margin_top=5, hexpand=true, visible=true }; - public Box title_box = new Box(Orientation.VERTICAL, 0) { valign=Align.CENTER, hexpand=true, visible=true }; - public MenuButton encryption_button = new MenuButton() { opacity=0, has_frame=false, height_request=30, width_request=30, margin_end=5, visible=true }; + public Box inner_box = new Box(Orientation.HORIZONTAL, 0) { margin_start=5, margin_top=5, hexpand=true }; + public Box title_box = new Box(Orientation.VERTICAL, 0) { valign=Align.CENTER, hexpand=true }; + public MenuButton encryption_button = new MenuButton() { opacity=0, has_frame=false, height_request=30, width_request=30, margin_end=5 }; public CallEncryptionButtonController encryption_button_controller; - public MenuButton menu_button = new MenuButton() { icon_name="open-menu-symbolic", has_frame=false, visible=true }; - public Button invite_button = new Button.from_icon_name("dino-account-plus") { has_frame=false, visible=true }; + public MenuButton menu_button = new MenuButton() { icon_name="open-menu-symbolic", has_frame=false }; + public Button invite_button = new Button.from_icon_name("dino-account-plus") { has_frame=false }; public bool shows_video = false; public string? participant_name; @@ -40,18 +40,19 @@ namespace Dino.Ui { this.participant_name = participant_name; Box titles_box = new Box(Orientation.VERTICAL, 0) { valign=Align.CENTER }; + titles_box.add_css_class("titles"); title_label.attributes = new AttrList(); title_label.attributes.insert(Pango.attr_weight_new(Weight.BOLD)); titles_box.append(title_label); subtitle_label.attributes = new AttrList(); subtitle_label.attributes.insert(Pango.attr_scale_new(Pango.Scale.SMALL)); - subtitle_label.get_style_context().add_class("dim-label"); + subtitle_label.add_css_class("dim-label"); titles_box.append(subtitle_label); header_bar.set_title_widget(titles_box); title_label.label = participant_name; - header_bar.get_style_context().add_class("participant-header-bar"); + header_bar.add_css_class("participant-header-bar"); header_bar.pack_start(invite_button); header_bar.pack_start(encryption_button); header_bar.pack_end(menu_button); @@ -73,14 +74,14 @@ namespace Dino.Ui { header_bar.show_title_buttons = is_highest_row; if (is_highest_row) { - header_bar.get_style_context().add_class("call-header-background"); + header_bar.add_css_class("call-header-background"); Gtk.Settings? gtk_settings = Gtk.Settings.get_default(); if (gtk_settings != null) { string[] buttons = gtk_settings.gtk_decoration_layout.split(":"); header_bar.decoration_layout = (is_start ? buttons[0] : "") + ":" + (is_end && buttons.length == 2 ? buttons[1] : ""); } } else { - header_bar.get_style_context().remove_class("call-header-background"); + header_bar.remove_css_class("call-header-background"); } reveal_or_hide_controls(); } @@ -93,9 +94,9 @@ namespace Dino.Ui { public void set_placeholder(Conversation? conversation, StreamInteractor stream_interactor) { shows_video = false; - Box box = new Box(Orientation.HORIZONTAL, 0) { visible=true }; - box.get_style_context().add_class("video-placeholder-box"); - AvatarImage avatar = new AvatarImage() { allow_gray=false, hexpand=true, vexpand=true, halign=Align.CENTER, valign=Align.CENTER, height=100, width=100, visible=true }; + Box box = new Box(Orientation.HORIZONTAL, 0); + box.add_css_class("video-placeholder-box"); + AvatarImage avatar = new AvatarImage() { allow_gray=false, hexpand=true, vexpand=true, halign=Align.CENTER, valign=Align.CENTER, height=100, width=100 }; if (conversation != null) { avatar.set_conversation(stream_interactor, conversation); } else { @@ -133,6 +134,10 @@ namespace Dino.Ui { } } + public bool is_menu_active() { + return false; + } + private void reveal_or_hide_controls() { header_bar.opacity = controls_active ? 1.0 : 0.0; invite_button.visible = may_show_invite_button && is_highest_row && is_start_row; diff --git a/main/src/ui/call_window/video_settings_popover.vala b/main/src/ui/call_window/video_settings_popover.vala index c931c466..58967bd2 100644 --- a/main/src/ui/call_window/video_settings_popover.vala +++ b/main/src/ui/call_window/video_settings_popover.vala @@ -11,7 +11,7 @@ public class Dino.Ui.VideoSettingsPopover : Gtk.Popover { private HashMap row_device = new HashMap(); public VideoSettingsPopover() { - Box box = new Box(Orientation.VERTICAL, 15) { visible=true }; + Box box = new Box(Orientation.VERTICAL, 15); box.append(create_camera_box()); this.set_child(box); @@ -21,19 +21,19 @@ public class Dino.Ui.VideoSettingsPopover : Gtk.Popover { Plugins.VideoCallPlugin call_plugin = Dino.Application.get_default().plugin_registry.video_call_plugin; Gee.List devices = call_plugin.get_devices("video", false); - Box camera_box = new Box(Orientation.VERTICAL, 10) { visible=true }; - camera_box.append(new Label("" + _("Cameras") + "") { use_markup=true, xalign=0, visible=true, can_focus=true /* grab initial focus*/ }); + Box camera_box = new Box(Orientation.VERTICAL, 10); + camera_box.append(new Label("" + _("Cameras") + "") { use_markup=true, xalign=0, can_focus=true /* grab initial focus*/ }); if (devices.size == 0) { - camera_box.append(new Label(_("No camera found.")) { visible=true }); + camera_box.append(new Label(_("No camera found."))); } else { - ListBox list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE, visible=true }; + ListBox list_box = new ListBox() { activate_on_single_click=true, selection_mode=SelectionMode.SINGLE }; list_box.set_header_func(listbox_header_func); - Frame frame = new Frame(null) { visible=true }; + Frame frame = new Frame(null); frame.set_child(list_box); foreach (Plugins.MediaDevice device in devices) { - Label display_name_label = new Label(device.display_name) { xalign=0, visible=true }; - Image image = new Image.from_icon_name("object-select-symbolic") { visible=true }; + Label display_name_label = new Label(device.display_name) { xalign=0 }; + Image image = new Image.from_icon_name("object-select-symbolic"); if (current_device == null || current_device.id != device.id) { image.opacity = 0; } @@ -44,19 +44,19 @@ public class Dino.Ui.VideoSettingsPopover : Gtk.Popover { image.opacity = 1; } }); - Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7, visible=true }; + Box device_box = new Box(Orientation.HORIZONTAL, 0) { spacing=7 }; device_box.append(image); Box label_box = new Box(Orientation.VERTICAL, 0) { visible = true }; label_box.append(display_name_label); if (device.detail_name != null) { - Label detail_name_label = new Label(device.detail_name) { xalign=0, visible=true }; - detail_name_label.get_style_context().add_class("dim-label"); + Label detail_name_label = new Label(device.detail_name) { xalign=0 }; + detail_name_label.add_css_class("dim-label"); detail_name_label.attributes = new Pango.AttrList(); detail_name_label.attributes.insert(Pango.attr_scale_new(0.8)); label_box.append(detail_name_label); } device_box.append(label_box); - ListBoxRow list_box_row = new ListBoxRow() { visible=true }; + ListBoxRow list_box_row = new ListBoxRow(); list_box_row.set_child(device_box); list_box.append(list_box_row); -- cgit v1.2.3-54-g00ecf