aboutsummaryrefslogtreecommitdiff
path: root/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'connection.c')
-rw-r--r--connection.c67
1 files changed, 43 insertions, 24 deletions
diff --git a/connection.c b/connection.c
index 5a869c4..0c07c70 100644
--- a/connection.c
+++ b/connection.c
@@ -8,6 +8,34 @@
#include "log.h"
#include "connection.h"
+static bool query_xrm(Connection *con, const char *res, char **value)
+{
+ if (xcb_xrm_resource_get_string(con->database, res, res, value) >= 0) {
+ log_debug("Xrm query '%s' found '%s'", res, *value);
+ return true;
+ }
+
+ log_debug("Xrm query '%s' not found", res);
+ return false;
+}
+
+static void update_xrm(Connection *con)
+{
+ // TODO
+}
+
+static void update_scale(Connection *con)
+{
+ char *dpi_value;
+ if (query_xrm(con, "Xft.dpi", &dpi_value)) {
+ con->screen_dpi = strtod(dpi_value, NULL);
+ g_free(dpi_value);
+ } else {
+ con->screen_dpi = (double)con->screen_size->height * 25.4 / (double)con->screen_size->mheight;
+ log_debug("Fallback dpi value '%.2lf'", con->screen_dpi);
+ }
+}
+
typedef struct {
GSource source;
Connection *con;
@@ -65,8 +93,19 @@ static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer
break;
}
+ case XCB_CREATE_NOTIFY: {
+ xcb_create_notify_event_t *create = (xcb_create_notify_event_t *)xsource->event;
+ log_debug("Processing event 'CreateNotify' [type=%d]", XCB_CREATE_NOTIFY);
+
+ // TODO: Circulate top the window if override_redirect == 0
+
+ break;
+ }
+
case XCB_BUTTON_RELEASE: {
log_debug("Mouse event");
+
+ // TODO: Handle click generically by translating the button code
break;
}
@@ -75,7 +114,8 @@ static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer
log_debug("Processing event 'PropertyNotify' [type=%d]", XCB_PROPERTY_NOTIFY);
if (property->atom == XCB_ATOM_RESOURCE_MANAGER) {
- //window_update_scale(data);
+ update_xrm(xsource->con);
+ update_scale(xsource->con);
// Redraw
//callback(data);
@@ -87,6 +127,8 @@ static gboolean source_dispatch(GSource *source, GSourceFunc callback, gpointer
const char *extension;
const char *name = xcb_errors_get_name_for_xcb_event(xsource->con->errors, xsource->event, &extension);
+ // TODO: Handle XCB_RANDR_SCREEN_CHANGE_NOTIFY
+
log_debug("Ignoring event '%s' [type=%d, extension=%s]",
name,
xsource->event->response_type & 0x7f,
@@ -121,29 +163,6 @@ static void attach_source(Connection *con)
g_source_attach(con->source, NULL);
}
-static bool query_xrm(Connection *con, const char *res, char **value)
-{
- if (xcb_xrm_resource_get_string(con->database, res, res, value) >= 0) {
- log_debug("Xrm query '%s' found '%s'", res, *value);
- return true;
- }
-
- log_debug("Xrm query '%s' not found", res);
- return false;
-}
-
-static void update_scale(Connection *con)
-{
- char *dpi_value;
- if (query_xrm(con, "Xft.dpi", &dpi_value)) {
- con->screen_dpi = strtod(dpi_value, NULL);
- g_free(dpi_value);
- } else {
- con->screen_dpi = (double)con->screen_size->height * 25.4 / (double)con->screen_size->mheight;
- log_debug("Fallback dpi value '%.2lf'", con->screen_dpi);
- }
-}
-
Connection *connection_create()
{
Connection *con = g_malloc0(sizeof(Connection));