style: Use layout name as css class

This commit is contained in:
Dorota Czaplejewicz
2022-09-03 08:04:40 +00:00
parent 9413150d85
commit c30e951907
10 changed files with 32 additions and 13 deletions

View File

@ -5,6 +5,11 @@ sq_view {
font-size: 1.5em; font-size: 1.5em;
} }
sq_view.gr_polytonic {
font-family: cantarell, sans-serif;
font-size: 5em;
}
sq_button { sq_button {
border-radius: 4px; border-radius: 4px;
margin: 2px; margin: 2px;

1
debian/control vendored
View File

@ -8,6 +8,7 @@ Build-Depends:
meson (>=0.51.0), meson (>=0.51.0),
ninja-build, ninja-build,
pkg-config, pkg-config,
libbsd-dev,
libglib2.0-dev, libglib2.0-dev,
libgnome-desktop-3-dev, libgnome-desktop-3-dev,
libgtk-3-dev, libgtk-3-dev,

View File

@ -8,6 +8,7 @@ Build-Depends:
meson (>=0.51.0), meson (>=0.51.0),
ninja-build, ninja-build,
pkg-config, pkg-config,
libbsd-dev,
libglib2.0-dev, libglib2.0-dev,
libgnome-desktop-3-dev, libgnome-desktop-3-dev,
libgtk-3-dev, libgtk-3-dev,

View File

@ -21,6 +21,7 @@
#include "config.h" #include "config.h"
#define _XOPEN_SOURCE 500 #define _XOPEN_SOURCE 500
#include <bsd/string.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <string.h> #include <string.h>
@ -91,12 +92,13 @@ void level_keyboard_free(LevelKeyboard *self) {
} }
LevelKeyboard* LevelKeyboard*
level_keyboard_new (struct squeek_layout *layout) level_keyboard_new (char *style_name, struct squeek_layout *layout)
{ {
LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1); LevelKeyboard *keyboard = g_new0(LevelKeyboard, 1);
if (!keyboard) { if (!keyboard) {
g_error("Failed to create a keyboard"); g_error("Failed to create a keyboard");
} }
keyboard->layout = layout; keyboard->layout = layout;
strlcpy(keyboard->style_name, style_name, 19);
return keyboard; return keyboard;
} }

View File

@ -38,17 +38,17 @@ struct keymap {
size_t fd_len; // length of the data inside keymap_fd size_t fd_len; // length of the data inside keymap_fd
}; };
/// Keyboard state holder /// Keyboard info holder
struct _LevelKeyboard { struct _LevelKeyboard {
char style_name[20]; // The name of the css class on layout
struct squeek_layout *layout; // owned struct squeek_layout *layout; // owned
// FIXME: This no longer needs to exist, keymap was folded into layout.
}; };
typedef struct _LevelKeyboard LevelKeyboard; typedef struct _LevelKeyboard LevelKeyboard;
gchar *eek_keyboard_get_keymap(LevelKeyboard *keyboard); gchar *eek_keyboard_get_keymap(LevelKeyboard *keyboard);
LevelKeyboard* LevelKeyboard*
level_keyboard_new (struct squeek_layout *layout); level_keyboard_new (char *style_name, struct squeek_layout *layout);
void level_keyboard_free(LevelKeyboard *self); void level_keyboard_free(LevelKeyboard *self);
G_END_DECLS G_END_DECLS

View File

@ -335,6 +335,7 @@ eek_renderer_new (LevelKeyboard *keyboard,
if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) { if (squeek_layout_get_kind(keyboard->layout) == ARRANGEMENT_KIND_WIDE) {
gtk_style_context_add_class(renderer->view_context, "wide"); gtk_style_context_add_class(renderer->view_context, "wide");
} }
gtk_style_context_add_class(renderer->view_context, (char*)&keyboard->style_name);
gtk_style_context_add_provider (renderer->view_context, gtk_style_context_add_provider (renderer->view_context,
GTK_STYLE_PROVIDER(renderer->css_provider), GTK_STYLE_PROVIDER(renderer->css_provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

View File

@ -126,8 +126,8 @@ settings_get_layout(GSettings *settings, char **type, char **layout)
g_variant_unref(inputs); g_variant_unref(inputs);
} }
void eekboard_context_service_set_layout(EekboardContextService *context, struct squeek_layout *layout, uint32_t timestamp) { void eekboard_context_service_set_layout(EekboardContextService *context, char *style_name, struct squeek_layout *layout, uint32_t timestamp) {
LevelKeyboard *keyboard = level_keyboard_new(layout); LevelKeyboard *keyboard = level_keyboard_new(style_name, layout);
// set as current // set as current
LevelKeyboard *previous_keyboard = context->keyboard; LevelKeyboard *previous_keyboard = context->keyboard;
context->keyboard = keyboard; context->keyboard = keyboard;

View File

@ -253,14 +253,14 @@ fn load_layout_data_with_fallback(
} }
pub fn load_layout( pub fn load_layout(
name: String, name: &String,
kind: ArrangementKind, kind: ArrangementKind,
variant: ContentPurpose, variant: ContentPurpose,
overlay: Option<String>, overlay: &Option<String>,
) -> layout::Layout { ) -> layout::Layout {
let overlay = overlay.as_ref().map(String::as_str); let overlay = overlay.as_ref().map(String::as_str);
let (found_kind, layout) let (found_kind, layout)
= load_layout_data_with_fallback(&name, kind, variant, overlay); = load_layout_data_with_fallback(name, kind, variant, overlay);
layout::Layout::new(layout, found_kind, variant) layout::Layout::new(layout, found_kind, variant)
} }

View File

@ -13,7 +13,8 @@ use glib::{Continue, MainContext, PRIORITY_DEFAULT, Receiver};
mod c { mod c {
use super::*; use super::*;
use std::os::raw::c_void; use std::ffi::CString;
use std::os::raw::{c_char, c_void};
use std::ptr; use std::ptr;
use std::rc::Rc; use std::rc::Rc;
use std::time::Instant; use std::time::Instant;
@ -83,7 +84,7 @@ mod c {
#[allow(improper_ctypes)] #[allow(improper_ctypes)]
fn init_wayland(wayland: *mut Wayland); fn init_wayland(wayland: *mut Wayland);
#[allow(improper_ctypes)] #[allow(improper_ctypes)]
fn eekboard_context_service_set_layout(service: HintManager, layout: *const layout::Layout, timestamp: u32); fn eekboard_context_service_set_layout(service: HintManager, name: *const c_char, layout: *const layout::Layout, timestamp: u32);
// This should probably only get called from the gtk main loop, // This should probably only get called from the gtk main loop,
// given that dbus handler is using glib. // given that dbus handler is using glib.
fn dbus_handler_set_visible(dbus: *const DBusHandler, visible: u8); fn dbus_handler_set_visible(dbus: *const DBusHandler, visible: u8);
@ -187,10 +188,17 @@ mod c {
purpose, purpose,
} = description; } = description;
actors::popover::set_overlay(popover, overlay_name.clone()); actors::popover::set_overlay(popover, overlay_name.clone());
let layout = loading::load_layout(name, kind, purpose, overlay_name); let layout = loading::load_layout(&name, kind, purpose, &overlay_name);
let layout = Box::into_raw(Box::new(layout)); let layout = Box::into_raw(Box::new(layout));
// CSS can't express "+" in the class
let name = overlay_name.unwrap_or(name).replace('+', "_");
let name = CString::new(name).unwrap_or(
CString::new("").unwrap()
);
unsafe { unsafe {
eekboard_context_service_set_layout(hint_manager, layout, 0); // Take out the pointer to a temp variable so that it outlives the set_layout call.
let name = name.as_ptr();
eekboard_context_service_set_layout(hint_manager, name, layout, 0);
} }
} }
} }

View File

@ -45,6 +45,7 @@ deps = [
dependency('gio-unix-2.0'), dependency('gio-unix-2.0'),
dependency('gnome-desktop-3.0', version: '>=3.0'), dependency('gnome-desktop-3.0', version: '>=3.0'),
dependency('gtk+-3.0', version: '>=3.0'), dependency('gtk+-3.0', version: '>=3.0'),
dependency('libbsd'),
dependency('libfeedback-0.0'), dependency('libfeedback-0.0'),
dependency('wayland-client', version: '>=1.14'), dependency('wayland-client', version: '>=1.14'),
dependency('xkbcommon'), dependency('xkbcommon'),