aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x11.c52
-rw-r--r--x11.h2
2 files changed, 30 insertions, 24 deletions
diff --git a/x11.c b/x11.c
index df072b9..b8e105b 100644
--- a/x11.c
+++ b/x11.c
@@ -93,6 +93,8 @@ static gboolean xcb_source_dispatch(GSource *source, GSourceFunc callback, gpoin
case XCB_PROPERTY_NOTIFY: {
xcb_property_notify_event_t *property = (xcb_property_notify_event_t *)xsource->event;
+ log_debug("Processing event 'PropertyNotify' [type %d]", XCB_PROPERTY_NOTIFY);
+
if (property->atom == XCB_ATOM_RESOURCE_MANAGER) {
window_update_scale(data);
@@ -257,26 +259,6 @@ found_visual:
xcb_icccm_set_wm_name(win->connection, win->window, XCB_ATOM_STRING, 8, strlen("comet"), "comet");
xcb_map_window(win->connection, win->window);
- //xcb_atom_t NET_WM_WINDOW_OPACITY = intern_atom(win, "_NET_WM_WINDOW_OPACITY");
- //xcb_atom_t CARDINAL = intern_atom(win, "CARDINAL");
-
- // Value between 0 and 1
- //double transparency = 0.8;
- //unsigned long opacity = 0xffffffff * transparency;
-
- //error =
- //xcb_request_check(win->connection,
- //xcb_change_property_checked(win->connection,
- // XCB_PROP_MODE_REPLACE,
- // win->window,
- // NET_WM_WINDOW_OPACITY,
- // CARDINAL,
- // 32,
- // 1,
- // (char *)&opacity));
- //assert(error == NULL);
- //log_debug("Window '%s' set to '%d%%'", "opacity", (int)round(100 - 100 * transparency));
-
xcb_flush(win->connection);
log_debug("Xcb initialized");
@@ -306,16 +288,18 @@ cairo_t *window_get_context(Window *win)
void window_update_scale(Window *win)
{
+ const char *dpi_res = "Xft.dpi";
char *dpi_value;
- if (xcb_xrm_resource_get_string(win->database, "Xft.dpi", "Xft.dpi", &dpi_value) >= 0) {
- log_debug("Xrm query '%s' found '%s'", "Xft.dpi", dpi_value);
+
+ if (xcb_xrm_resource_get_string(win->database, dpi_res, dpi_res, &dpi_value) >= 0) {
+ log_debug("Xrm query '%s' found '%s'", dpi_res, dpi_value);
win->dpi = strtod(dpi_value, NULL);
g_free(dpi_value);
} else {
- log_debug("Xrm query '%s' not found", "Xft.dpi");
+ log_debug("Xrm query '%s' not found", dpi_res);
win->dpi = 96.0;
//win->dpi = (double)screen_size->height * 25.4 / (double)screen_size->mheight;
- log_debug("Fallback dpi value '%lf'", win->dpi);
+ log_debug("Fallback dpi value '%.2lf'", win->dpi);
}
}
@@ -330,6 +314,26 @@ void window_get_screen_size(Window *win, int *width, int *height)
*height = win->screen_height;
}
+void window_set_transparency(Window *win, double alpha)
+{
+ // Value between 0 and 1
+ g_assert_true(alpha >= 0 && alpha <= 1);
+ unsigned long opacity = 0xffffffff * alpha;
+
+ xcb_atom_t NET_WM_WINDOW_OPACITY = intern_atom(win, "_NET_WM_WINDOW_OPACITY");
+ xcb_change_property(win->connection,
+ XCB_PROP_MODE_REPLACE,
+ win->window,
+ NET_WM_WINDOW_OPACITY,
+ XCB_ATOM_CARDINAL,
+ 32,
+ 1,
+ (char *)&opacity);
+
+ log_debug("Window transparency set to '%.2lf%%'", alpha * 100.0);
+
+}
+
void window_move(Window *win, int x, int y)
{
if (win->x == x && win->y == y) return;
diff --git a/x11.h b/x11.h
index 3884485..b65310b 100644
--- a/x11.h
+++ b/x11.h
@@ -15,6 +15,8 @@ double window_get_scale(Window *win);
void window_get_screen_size(Window *win, int *width, int *height);
+void window_set_transparency(Window *win, double alpha);
+
void window_move(Window *win, int x, int y);
void window_resize(Window *win, int width, int height);