Restore window state (size, maximized, position)
This commit is contained in:
parent
119e7cce4f
commit
c7c1fb5124
|
@ -121,7 +121,7 @@ if(NOT VALA_EXECUTABLE)
|
||||||
unset(VALA_EXECUTABLE CACHE)
|
unset(VALA_EXECUTABLE CACHE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Vala 0.30 REQUIRED)
|
find_package(Vala 0.34 REQUIRED)
|
||||||
if(VALA_VERSION VERSION_GREATER "0.34.90" AND VALA_VERSION VERSION_LESS "0.36.1")
|
if(VALA_VERSION VERSION_GREATER "0.34.90" AND VALA_VERSION VERSION_LESS "0.36.1")
|
||||||
# Due to a bug on 0.36.0 (and pre-releases), we need to disable FAST_VAPI
|
# Due to a bug on 0.36.0 (and pre-releases), we need to disable FAST_VAPI
|
||||||
set(DISABLE_FAST_VAPI yes)
|
set(DISABLE_FAST_VAPI yes)
|
||||||
|
|
|
@ -12,7 +12,7 @@ Build
|
||||||
* C compiler
|
* C compiler
|
||||||
* gettext
|
* gettext
|
||||||
* ninja(-build) (recommend)
|
* ninja(-build) (recommend)
|
||||||
* valac (≥ 0.30)
|
* valac (≥ 0.34)
|
||||||
|
|
||||||
**Run-time dependencies**
|
**Run-time dependencies**
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
# Search for the valac executable in the usual system paths
|
# Search for the valac executable in the usual system paths
|
||||||
# Some distributions rename the valac to contain the major.minor in the binary name
|
# Some distributions rename the valac to contain the major.minor in the binary name
|
||||||
find_package(GObject REQUIRED)
|
find_package(GObject REQUIRED)
|
||||||
find_program(VALA_EXECUTABLE NAMES valac valac-0.36 valac-0.34 valac-0.32 valac-0.30)
|
find_program(VALA_EXECUTABLE NAMES valac valac-0.38 valac-0.36 valac-0.34 valac-0.32)
|
||||||
mark_as_advanced(VALA_EXECUTABLE)
|
mark_as_advanced(VALA_EXECUTABLE)
|
||||||
|
|
||||||
# Determine the valac version
|
# Determine the valac version
|
||||||
|
|
|
@ -11,6 +11,12 @@ public class Settings : Object {
|
||||||
send_marker_ = col_to_bool_or_default("send_marker", true);
|
send_marker_ = col_to_bool_or_default("send_marker", true);
|
||||||
notifications_ = col_to_bool_or_default("notifications", true);
|
notifications_ = col_to_bool_or_default("notifications", true);
|
||||||
convert_utf8_smileys_ = col_to_bool_or_default("convert_utf8_smileys", true);
|
convert_utf8_smileys_ = col_to_bool_or_default("convert_utf8_smileys", true);
|
||||||
|
|
||||||
|
current_width = col_to_int_or_default("window_width", 1200);
|
||||||
|
current_height = col_to_int_or_default("window_height", 700);
|
||||||
|
is_maximized = col_to_bool_or_default("window_maximized", false);
|
||||||
|
position_x = col_to_int_or_default("window_position_x", -1);
|
||||||
|
position_y = col_to_int_or_default("window_position_y", -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool col_to_bool_or_default(string key, bool def) {
|
private bool col_to_bool_or_default(string key, bool def) {
|
||||||
|
@ -18,6 +24,11 @@ public class Settings : Object {
|
||||||
return val != null ? bool.parse(val) : def;
|
return val != null ? bool.parse(val) : def;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int col_to_int_or_default(string key, int def) {
|
||||||
|
string? val = db.settings.select({db.settings.value}).with(db.settings.key, "=", key)[db.settings.value];
|
||||||
|
return val != null ? int.parse(val) : def;
|
||||||
|
}
|
||||||
|
|
||||||
private bool send_typing_;
|
private bool send_typing_;
|
||||||
public bool send_typing {
|
public bool send_typing {
|
||||||
get { return send_typing_; }
|
get { return send_typing_; }
|
||||||
|
@ -53,6 +64,56 @@ public class Settings : Object {
|
||||||
convert_utf8_smileys_ = value;
|
convert_utf8_smileys_ = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int current_width_;
|
||||||
|
public int current_width {
|
||||||
|
get { return current_width_; }
|
||||||
|
set {
|
||||||
|
if (value == current_width_) return;
|
||||||
|
db.settings.insert().or("REPLACE").value(db.settings.key, "window_width").value(db.settings.value, value.to_string()).perform();
|
||||||
|
current_width_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int current_height_;
|
||||||
|
public int current_height {
|
||||||
|
get { return current_height_; }
|
||||||
|
set {
|
||||||
|
if (value == current_height_) return;
|
||||||
|
db.settings.insert().or("REPLACE").value(db.settings.key, "window_height").value(db.settings.value, value.to_string()).perform();
|
||||||
|
current_height_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool is_maximized_;
|
||||||
|
public bool is_maximized {
|
||||||
|
get { return is_maximized_; }
|
||||||
|
set {
|
||||||
|
if (value == is_maximized_) return;
|
||||||
|
db.settings.insert().or("REPLACE").value(db.settings.key, "window_maximized").value(db.settings.value, value.to_string()).perform();
|
||||||
|
is_maximized_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int position_x_;
|
||||||
|
public int position_x {
|
||||||
|
get { return position_x_; }
|
||||||
|
set {
|
||||||
|
if (value == position_x_) return;
|
||||||
|
db.settings.insert().or("REPLACE").value(db.settings.key, "window_position_x").value(db.settings.value, value.to_string()).perform();
|
||||||
|
position_x_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int position_y_;
|
||||||
|
public int position_y {
|
||||||
|
get { return position_y_; }
|
||||||
|
set {
|
||||||
|
if (value == position_y_) return;
|
||||||
|
db.settings.insert().or("REPLACE").value(db.settings.key, "window_position_y").value(db.settings.value, value.to_string()).perform();
|
||||||
|
position_y_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,15 @@ public class UnifiedWindow : Window {
|
||||||
|
|
||||||
private StreamInteractor stream_interactor;
|
private StreamInteractor stream_interactor;
|
||||||
private Conversation? conversation;
|
private Conversation? conversation;
|
||||||
|
private Application app;
|
||||||
|
|
||||||
public UnifiedWindow(Application application, StreamInteractor stream_interactor) {
|
public UnifiedWindow(Application application, StreamInteractor stream_interactor) {
|
||||||
Object(application : application, default_width : 1200, default_height : 700);
|
Object(application : application);
|
||||||
this.stream_interactor = stream_interactor;
|
this.stream_interactor = stream_interactor;
|
||||||
|
this.app = application;
|
||||||
|
|
||||||
|
restore_window_size();
|
||||||
|
|
||||||
|
|
||||||
this.get_style_context().add_class("dino-main");
|
this.get_style_context().add_class("dino-main");
|
||||||
setup_headerbar();
|
setup_headerbar();
|
||||||
|
@ -120,6 +125,30 @@ public class UnifiedWindow : Window {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void restore_window_size() {
|
||||||
|
default_width = app.settings.current_width;
|
||||||
|
default_height = app.settings.current_height;
|
||||||
|
if (app.settings.is_maximized) this.maximize();
|
||||||
|
if (app.settings.position_x != -1 && app.settings.position_y != -1) {
|
||||||
|
move(app.settings.position_x, app.settings.position_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
delete_event.connect(() => {
|
||||||
|
int x, y;
|
||||||
|
get_position(out x, out y);
|
||||||
|
app.settings.position_x = x;
|
||||||
|
app.settings.position_y = y;
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
get_size(out width, out height);
|
||||||
|
app.settings.current_width = width;
|
||||||
|
app.settings.current_height = height;
|
||||||
|
|
||||||
|
app.settings.is_maximized = is_maximized;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private bool on_focus_in_event() {
|
private bool on_focus_in_event() {
|
||||||
stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_in(conversation);
|
stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_in(conversation);
|
||||||
urgency_hint = false;
|
urgency_hint = false;
|
||||||
|
|
|
@ -62,6 +62,7 @@ public class FileProvider : Dino.FileProvider, Object {
|
||||||
});
|
});
|
||||||
if (content_length != null && int.parse(content_length) < 5000000) {
|
if (content_length != null && int.parse(content_length) < 5000000) {
|
||||||
FileTransfer file_transfer = new FileTransfer();
|
FileTransfer file_transfer = new FileTransfer();
|
||||||
|
try {
|
||||||
Soup.Request request = session.request(message.body);
|
Soup.Request request = session.request(message.body);
|
||||||
request.send_async.begin(null, (obj, res) => {
|
request.send_async.begin(null, (obj, res) => {
|
||||||
try {
|
try {
|
||||||
|
@ -84,6 +85,7 @@ public class FileProvider : Dino.FileProvider, Object {
|
||||||
file_transfer.info = message.body;
|
file_transfer.info = message.body;
|
||||||
file_incoming(file_transfer);
|
file_incoming(file_transfer);
|
||||||
});
|
});
|
||||||
|
} catch (Error e) { }
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue