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)
|
||||
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")
|
||||
# Due to a bug on 0.36.0 (and pre-releases), we need to disable FAST_VAPI
|
||||
set(DISABLE_FAST_VAPI yes)
|
||||
|
|
|
@ -12,7 +12,7 @@ Build
|
|||
* C compiler
|
||||
* gettext
|
||||
* ninja(-build) (recommend)
|
||||
* valac (≥ 0.30)
|
||||
* valac (≥ 0.34)
|
||||
|
||||
**Run-time dependencies**
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
# Search for the valac executable in the usual system paths
|
||||
# Some distributions rename the valac to contain the major.minor in the binary name
|
||||
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)
|
||||
|
||||
# Determine the valac version
|
||||
|
|
|
@ -11,6 +11,12 @@ public class Settings : Object {
|
|||
send_marker_ = col_to_bool_or_default("send_marker", true);
|
||||
notifications_ = col_to_bool_or_default("notifications", 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) {
|
||||
|
@ -18,6 +24,11 @@ public class Settings : Object {
|
|||
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_;
|
||||
public bool send_typing {
|
||||
get { return send_typing_; }
|
||||
|
@ -53,6 +64,56 @@ public class Settings : Object {
|
|||
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 Conversation? conversation;
|
||||
private Application app;
|
||||
|
||||
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.app = application;
|
||||
|
||||
restore_window_size();
|
||||
|
||||
|
||||
this.get_style_context().add_class("dino-main");
|
||||
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() {
|
||||
stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_in(conversation);
|
||||
urgency_hint = false;
|
||||
|
|
|
@ -62,6 +62,7 @@ public class FileProvider : Dino.FileProvider, Object {
|
|||
});
|
||||
if (content_length != null && int.parse(content_length) < 5000000) {
|
||||
FileTransfer file_transfer = new FileTransfer();
|
||||
try {
|
||||
Soup.Request request = session.request(message.body);
|
||||
request.send_async.begin(null, (obj, res) => {
|
||||
try {
|
||||
|
@ -84,6 +85,7 @@ public class FileProvider : Dino.FileProvider, Object {
|
|||
file_transfer.info = message.body;
|
||||
file_incoming(file_transfer);
|
||||
});
|
||||
} catch (Error e) { }
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue