This commit is contained in:
Alexander Rosenberg 2023-10-21 05:12:52 -07:00
parent ce765e30cf
commit 94801968fa
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730
6 changed files with 38 additions and 15 deletions

View File

@ -6,6 +6,6 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
gtk4 = { version = "0.7.3", features = ["blueprint"] }
gtk4 = { version = "0.7.3", features = ["blueprint", "v4_12"] }
simplelogin = { version = "0.1.0", path = "../simplelogin" }
tokio = { version = "1.33.0", features = ["full"] }

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<schemalist>
<schema id="im.zander.SimpleLogin" path="/im/zander/SimpleLogin/">
<key name="api-key" type="s">
<default>""</default>
<key name="api-key" type="ms">
<default>nothing</default>
<summary>Api key</summary>
<description>The api key for the current user</description>
</key>

View File

@ -117,9 +117,6 @@ template $LoginWindow : ApplicationWindow {
receives-default: true;
truncate-multiline: true;
styles [
]
layout {
column: "1";
row: "1";

View File

@ -1,20 +1,34 @@
use crate::login_window::LoginWindow;
use gtk4 as gtk;
use gtk::{glib, gio, prelude::*, subclass::prelude::*};
use gtk::{glib, gdk, gio, prelude::*, subclass::prelude::*};
mod imp {
use super::*;
use std::cell::RefCell;
#[derive(Debug)]
#[derive(Debug, glib::Properties)]
#[properties(wrapper_type = super::Application)]
pub struct Application {
pub settings: gio::Settings,
#[property(name = "api-key", type = Option<String>,
get = Self::api_key, set = Self::set_api_key, nullable)]
pub settings: RefCell<gio::Settings>,
}
impl Application {
fn api_key(&self) -> Option<String> {
self.settings.borrow().value("api-key").get()
}
fn set_api_key(&self, value: Option<String>) {
_ = self.settings.borrow().set("api-key", value).unwrap();
}
}
impl Default for Application {
fn default() -> Self {
Self {
settings: gio::Settings::new(crate::APP_ID)
settings: RefCell::new(gio::Settings::new(crate::APP_ID)),
}
}
}
@ -28,11 +42,22 @@ mod imp {
impl ApplicationImpl for Application {
fn activate(&self) {
let css = gtk::CssProvider::new();
gtk::style_context_add_provider_for_display(
&gdk::Display::default().unwrap(),
&css, gtk::STYLE_PROVIDER_PRIORITY_APPLICATION
);
css.load_from_string(include_str!("../data/global.css"));
if self.api_key().is_none() {
let login_window = LoginWindow::new(&self.obj());
login_window.present();
} else {
todo!();
}
}
}
#[glib::derived_properties]
impl ObjectImpl for Application {}
impl GtkApplicationImpl for Application {}
}

View File

@ -4,15 +4,16 @@ mod application;
use gtk4 as gtk;
use gtk::prelude::*;
use gtk::glib::{self, g_message};
use gtk::glib::{self, g_info};
const APP_ID: &str = "im.zander.SimpleLogin";
fn main() -> glib::ExitCode {
if cfg!(debug_assertions) {
#[cfg(debug_assertions)] {
std::env::set_var("G_MESSAGES_DEBUG", "SimpleLogin");
// allow us to use a test schema for debug runs
let schema_dir = concat!(env!("OUT_DIR"), "/schemas/");
g_message!("SimpleLogin", "Using schema dir: \"{}\"", schema_dir);
g_info!("SimpleLogin", "Using schema dir: \"{}\"", schema_dir);
std::env::set_var("GSETTINGS_SCHEMA_DIR", schema_dir);
}
let app = application::Application::new(APP_ID);