Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
9c0efbd
Update deps
danirabbit Jul 22, 2026
831e403
Update more deps, drop old vapis
danirabbit Jul 22, 2026
2a04889
Easy find/replace
danirabbit Jul 22, 2026
5acb16b
Merge branch 'master' into danirabbit/gtk4
danirabbit Jul 22, 2026
1e784d1
Merge branch 'master' into danirabbit/gtk4
danirabbit Jul 27, 2026
cb6ef0e
ConversationList setup
danirabbit Jul 27, 2026
6d7cb58
MessageList: scrolled window viewport
danirabbit Jul 27, 2026
065d7a5
SourceList: remove drag and drop
danirabbit Jul 28, 2026
912f2af
merge master
danirabbit Jul 28, 2026
0d5551d
Remove sourcelist DND
danirabbit Jul 28, 2026
21d7f99
Merge branch 'master' into danirabbit/gtk4
danirabbit Jul 28, 2026
e8d1f1f
FolderList: Use GLib.Menu
danirabbit Jul 28, 2026
78a6e75
Fix detailed name
danirabbit Jul 28, 2026
4bff33e
use toplevel
danirabbit Jul 28, 2026
8348a71
Merge master
danirabbit Aug 4, 2026
d051a4b
Update SourceList.vala
danirabbit Aug 4, 2026
d1a4b9f
merge master
danirabbit Aug 5, 2026
109918a
state saving
danirabbit Aug 5, 2026
e8e03d8
Next build phase
danirabbit Aug 5, 2026
a09369c
Fix many errors and warnings
danirabbit Aug 5, 2026
52f9b22
Merge branch 'master' into danirabbit/gtk4
danirabbit Aug 5, 2026
5c66f1d
Merge master
danirabbit Aug 5, 2026
d58f219
solve a bunch more errors and warnings
danirabbit Aug 5, 2026
975cbcf
Merge master
danirabbit Aug 6, 2026
a0c537d
Fix large icons warning
danirabbit Aug 6, 2026
3926d54
More fixes
danirabbit Aug 6, 2026
bdff66e
SignatureDialog: Use ListStore
danirabbit Aug 6, 2026
ebbc8de
AliasDialog: use ListStore
danirabbit Aug 6, 2026
0174c1c
merge master
danirabbit Aug 7, 2026
7876086
infobar shenanigans
danirabbit Aug 7, 2026
90b85f5
Menu stuff
danirabbit Aug 7, 2026
65c522c
Many such errors
danirabbit Aug 7, 2026
11bfd42
Uri Launcher
danirabbit Aug 7, 2026
ddc5e04
maybe entry stuff
danirabbit Aug 7, 2026
025e716
File chooser, some syntax
danirabbit Aug 7, 2026
01d5ebb
Fix more errors
danirabbit Aug 7, 2026
2fb3916
merge master
danirabbit Aug 8, 2026
d5a2b78
actionbar.append
danirabbit Aug 8, 2026
8e99fac
merge master
danirabbit Aug 9, 2026
6d87346
merge signaturedialog list
danirabbit Aug 9, 2026
021107d
merge aliasdialog list
danirabbit Aug 9, 2026
5259bd8
AliasDialog: fix icon size
danirabbit Aug 9, 2026
2459f48
merge FolderList menu
danirabbit Aug 9, 2026
4edc9af
Merge master
danirabbit Aug 11, 2026
2c92451
next stage of compilation
danirabbit Aug 11, 2026
66e06fa
next subclass issue
danirabbit Aug 11, 2026
08527ef
SourceList: don't subclass sealed Gtk.CellRendererPixbuf
danirabbit Aug 11, 2026
355faa7
It builds!
danirabbit Aug 11, 2026
61cc152
Fix up some stuff
danirabbit Aug 11, 2026
c29f875
merge master
danirabbit Aug 12, 2026
b18cfb3
Fix broken carousel
danirabbit Aug 12, 2026
84518c6
merge master
danirabbit Aug 12, 2026
1c94b46
ListView: Redo all the things (#1092)
danirabbit Aug 13, 2026
a02b4c1
Fix some action stuff
danirabbit Aug 13, 2026
3cc7e49
do everything on select
danirabbit Aug 13, 2026
c64d35a
Some menu adjustments
danirabbit Aug 13, 2026
2dc9c61
Use regular list store
danirabbit Aug 13, 2026
c38f815
items changed changes
danirabbit Aug 13, 2026
24af359
merge master
danirabbit Aug 14, 2026
f7ec5a1
less diff
danirabbit Aug 14, 2026
2598775
Merge branch 'master' into danirabbit/gtk4
danirabbit Sep 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions data/io.elementary.mail.gschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,15 @@
<summary>Whether the window was maximized on last run</summary>
<description>Whether the window was maximized on last run</description>
</key>
<key name="window-size" type="(ii)">
<default>(1024, 750)</default>
<summary>Most recent window size</summary>
<description>Most recent window size (width, height)</description>
<key name="window-height" type="i">
<default>750</default>
<summary>Most recent window height</summary>
<description>Most recent window height</description>
</key>
<key name="window-width" type="i">
<default>1024</default>
<summary>Most recent window width</summary>
<description>Most recent window width</description>
</key>
<key name="paned-start-position" type="i">
<default>190</default>
Expand Down
27 changes: 14 additions & 13 deletions meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,35 @@ add_project_arguments(['--vapidir', join_paths(meson.current_source_dir(), 'vapi

glib_dep = dependency('glib-2.0')
gobject_dep = dependency('gobject-2.0')
granite_dep = dependency('granite', version: '>= 6.0.0')
granite_dep = dependency('granite-7', version: '>= 7.1.0')
gtk_dep = dependency('gtk4')
gee_dep = dependency('gee-0.8')
handy_dep = dependency('libhandy-1', version: '>=1.1.90')
adw_dep = dependency('libadwaita-1', version: '>=1.0.0')
camel_dep = dependency('camel-1.2', version: '>= 3.28')
libedataserver_dep = dependency('libedataserver-1.2', version: '>= 3.28')
libedataserverui_dep = dependency('libedataserverui-1.2', version: '>=3.45.1')
webkit2_dep = dependency('webkit2gtk-4.1')
webkit2_web_extension_dep = dependency('webkit2gtk-web-extension-4.1')
libedataserver_dep = dependency('libedataserver-1.2', version: '>=3.45.1')
libedataserverui_dep = dependency('libedataserverui4-1.0', version: '>= 3.46.4')
webkit_dep = dependency('webkitgtk-6.0')
webkit_web_extension_dep = dependency('webkitgtk-web-process-extension-6.0')
libportal_dep = dependency('libportal')
libportal_gtk_dep = dependency('libportal-gtk3')
libportal_gtk_dep = dependency('libportal-gtk4')
folks_dep = dependency('folks')
m_dep = meson.get_compiler('c').find_library('m')

webkit2_extension_path = join_paths(get_option('prefix'), get_option('libdir'), meson.project_name(), 'webkit2')
webkit_extension_path = join_paths(get_option('prefix'), get_option('libdir'), meson.project_name(), 'webkit2')

dependencies = [
glib_dep,
gobject_dep,
granite_dep,
gtk_dep,
gee_dep,
handy_dep,
adw_dep,
camel_dep,
libedataserver_dep,
libedataserverui_dep,
libportal_dep,
libportal_gtk_dep,
webkit2_dep,
webkit_dep,
folks_dep,
m_dep
]
Expand All @@ -53,12 +55,11 @@ extension_dependencies = [
glib_dep,
gobject_dep,
gee_dep,
webkit2_web_extension_dep
webkit_web_extension_dep
]

add_global_arguments([
'-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name()),
'-DHANDY_USE_UNSTABLE_API'
'-DGETTEXT_PACKAGE="@0@"'.format(meson.project_name())
],
language:'c'
)
Expand Down
2 changes: 0 additions & 2 deletions po/POTFILES
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,3 @@ src/MessageList/FolderPopover/FolderPopover.vala
src/SourceList/CellRendererBadge.vala
src/SourceList/CellRendererExpander.vala
src/SourceList/SourceList.vala
src/VirtualizingListBox/VirtualizingListBoxRow.vala
src/VirtualizingListBox/VirtualizingListBox.vala
69 changes: 29 additions & 40 deletions src/Application.vala
Original file line number Diff line number Diff line change
Expand Up @@ -98,25 +98,12 @@ public class Mail.Application : Gtk.Application {
protected override void startup () {
base.startup ();

Hdy.init ();
Granite.init ();
Adw.init ();

var granite_settings = Granite.Settings.get_default ();
gtk_settings = Gtk.Settings.get_default ();
gtk_settings.gtk_icon_theme_name = "elementary";

check_theme ();
gtk_settings.notify["gtk-theme-name"].connect (check_theme);

gtk_settings.gtk_application_prefer_dark_theme = granite_settings.prefers_color_scheme == Granite.Settings.ColorScheme.DARK;

granite_settings.notify["prefers-color-scheme"].connect (() => {
gtk_settings.gtk_application_prefer_dark_theme = granite_settings.prefers_color_scheme == Granite.Settings.ColorScheme.DARK;
});

var css_provider = new Gtk.CssProvider ();
css_provider.load_from_resource ("io/elementary/mail/Application.css");
Gtk.StyleContext.add_provider_for_screen (Gdk.Screen.get_default (), css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);

var quit_action = new SimpleAction ("quit", null);
quit_action.activate.connect (() => {
foreach (unowned var window in get_windows ()) {
Expand All @@ -138,21 +125,25 @@ public class Mail.Application : Gtk.Application {

var account_settings_action = new SimpleAction (ACTION_ACCOUNT_SETTINGS, null);
account_settings_action.activate.connect (() => {
try {
Gtk.show_uri_on_window (active_window, "settings://accounts/online", Gtk.get_current_event_time ());
} catch (Error e) {
var dialog = new Granite.MessageDialog (
_("Unable to open System Settings"),
_("Open System Settings manually or install Evolution to set up online accounts."),
new ThemedIcon ("preferences-system")
) {
badge_icon = new ThemedIcon ("dialog-warning"),
modal = true,
transient_for = active_window,
};
dialog.response.connect (dialog.destroy);
dialog.present ();
}
var uri_launcher = new Gtk.UriLauncher ("settings://accounts/online");
uri_launcher.launch.begin (active_window, null, (obj, res) => {
try {
uri_launcher.launch.end (res);
} catch (Error e){
var dialog = new Granite.MessageDialog (
_("Unable to open System Settings"),
_("Open System Settings manually or install Evolution to set up online accounts."),
new ThemedIcon ("preferences-system")
) {
badge_icon = new ThemedIcon ("dialog-warning"),
modal = true,
transient_for = active_window,
};
dialog.show_error_details (e.message);
dialog.response.connect (dialog.destroy);
dialog.present ();
}
});
});

var load_images_action = settings.create_action (ACTION_LOAD_IMAGES);
Expand Down Expand Up @@ -188,15 +179,19 @@ public class Mail.Application : Gtk.Application {
main_window = new MainWindow (this);
add_window (main_window);

var rect = Gtk.Allocation ();
settings.get ("window-size", "(ii)", out rect.width, out rect.height);
main_window.set_allocation (rect);
/*
* This is very finicky. Bind size after present else set_titlebar gives us bad sizes
* Set maximize after height/width else window is min size on unmaximize
* Bind maximize as SET else get get bad sizes
*/
settings.bind ("window-height", main_window, "default-height", SettingsBindFlags.DEFAULT);
settings.bind ("window-width", main_window, "default-width", SettingsBindFlags.DEFAULT);

if (settings.get_boolean ("window-maximized")) {
main_window.maximize ();
}

main_window.show_all ();
settings.bind ("window-maximized", main_window, "maximized", SettingsBindFlags.SET);
}

main_window.present ();
Expand Down Expand Up @@ -230,12 +225,6 @@ public class Mail.Application : Gtk.Application {
}
}
}

private void check_theme () {
if (!gtk_settings.gtk_theme_name.has_prefix ("io.elementary")) {
gtk_settings.gtk_theme_name = "io.elementary.stylesheet.blueberry";
}
}
}

public static int main (string[] args) {
Expand Down
Loading
Loading