unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Proposal: lisp function for gtk-application-prefer-dark-theme
@ 2012-05-26 14:56 Antono Vasiljev
  2012-05-30 14:14 ` [PATCH]: " Antono Vasiljev
  0 siblings, 1 reply; 2+ messages in thread
From: Antono Vasiljev @ 2012-05-26 14:56 UTC (permalink / raw)
  To: emacs-devel


Hello,

I would like to be able setup emacs to use dark GTK theme variant[0].

GTK apps usually provide such possibliity via GSettings property
gtk-application-prefer-dark-theme[1].  I wonder how can it be binded to
elisp function (best file for such function).

I think this function should do nothing when emacs compiled without gtk3.
It could be useful in current theme engine in order to provide visual
consistency for themes with dark backgound.

Any ideas, objections, suggestions?


[0]: http://antono.info/files/images/screen/emacs-light-and-dark.png
[1]: http://developer.gnome.org/gtk3/3.2/GtkSettings.html

-- 
http://shelr.tv - plain text screencasting for terminal



^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH]: lisp function for gtk-application-prefer-dark-theme
  2012-05-26 14:56 Proposal: lisp function for gtk-application-prefer-dark-theme Antono Vasiljev
@ 2012-05-30 14:14 ` Antono Vasiljev
  0 siblings, 0 replies; 2+ messages in thread
From: Antono Vasiljev @ 2012-05-30 14:14 UTC (permalink / raw)
  To: Antono Vasiljev; +Cc: bug-gnu-emacs, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 455 bytes --]


Antono Vasiljev <self@antono.info> writes:

> Hello,
>
> I would like to be able setup emacs to use dark GTK theme variant[0].
>
> GTK apps usually provide such possibliity via GSettings property
> gtk-application-prefer-dark-theme[1].  I wonder how can it be binded to
> elisp function (best file for such function).

Replying to myself with initial patch implementing

  application-prefer-dark-theme ARG

See it in action: https://vimeo.com/43078091


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: application-prefer-dark-theme implementation --]
[-- Type: text/x-diff, Size: 2886 bytes --]

From 7679c96fb785bc682b086f08482411311d12f84a Mon Sep 17 00:00:00 2001
From: Antono Vasiljev <self@antono.info>
Date: Wed, 30 May 2012 16:56:42 +0300
Subject: [PATCH] Implemented lisp function application-prefer-dark-theme

* src/xsettings.c: GtkSetting and function definition
* src/xsettings.h: EXFUN macro for application-prefer-dark-theme
---
 src/xsettings.c |   32 ++++++++++++++++++++++++++++++++
 src/xsettings.h |    1 +
 2 files changed, 33 insertions(+)

diff --git a/src/xsettings.c b/src/xsettings.c
index 69ef22f..d8c01c7 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -201,6 +201,7 @@ struct xsettings
 /* The single GSettings instance, or NULL if not connected to GSettings.  */
 
 static GSettings *gsettings_client;
+static GtkSettings *gtk_settings;
 
 /* Callback called when something changed in GSettings.  */
 
@@ -824,6 +825,8 @@ init_gsettings (void)
   g_signal_connect (G_OBJECT (gsettings_client), "changed",
                     G_CALLBACK (something_changed_gsettingsCB), NULL);
 
+  gtk_settings = gtk_settings_get_default ();
+
   val = g_settings_get_value (gsettings_client, GSETTINGS_TOOL_BAR_STYLE);
   if (val)
     {
@@ -1004,6 +1007,30 @@ known style.  Otherwise return image.  */)
   return Qimage;
 }
 
+DEFUN ("application-prefer-dark-theme",
+       Fapplication_prefer_dark_theme,
+       Sapplication_prefer_dark_theme,
+       0, 1, 0,
+       doc: /* Set dark theme variant for application if supported by
+GUI toolkit and ARG is not nil. */)
+  (Lisp_Object arg)
+{
+  gboolean result = FALSE;
+
+#ifdef HAVE_GSETTINGS
+  if (NILP (arg) || (NUMBERP(arg) && (XINT(arg) < 0))) {
+    result = FALSE;
+  } else {
+    result = TRUE;
+  }
+
+  g_object_set (G_OBJECT (gtk_settings),
+                "gtk-application-prefer-dark-theme", result, NULL);
+#endif
+
+  return result ? Fmake_symbol (build_string ("t")) : Qnil;
+}
+
 void
 syms_of_xsettings (void)
 {
@@ -1012,6 +1039,7 @@ syms_of_xsettings (void)
   first_dpyinfo = NULL;
 #ifdef HAVE_GSETTINGS
   gsettings_client = NULL;
+  gtk_settings = NULL;
 #endif
 #ifdef HAVE_GCONF
   gconf_client = NULL;
@@ -1041,6 +1069,10 @@ If this variable is nil, Emacs ignores system font changes.  */);
 #endif
 #endif
 
+#ifdef HAVE_GSETTINGS
+  defsubr (&Sapplication_prefer_dark_theme);
+#endif
+
   current_tool_bar_style = Qnil;
   DEFSYM (Qtool_bar_style, "tool-bar-style");
   defsubr (&Stool_bar_get_system_style);
diff --git a/src/xsettings.h b/src/xsettings.h
index d6b0c09..83b5cfc 100644
--- a/src/xsettings.h
+++ b/src/xsettings.h
@@ -21,6 +21,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #define XSETTINGS_H
 
 EXFUN (Ftool_bar_get_system_style, 0);
+EXFUN (Fapplication_prefer_dark_theme, 1);
 
 extern void xsettings_initialize (struct x_display_info *dpyinfo);
 extern void xft_settings_event (struct x_display_info *dpyinfo,
-- 
1.7.9.5


[-- Attachment #3: Type: text/plain, Size: 62 bytes --]


-- 
http://shelr.tv - plain text screencasts for unix ninjas

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2012-05-30 14:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-26 14:56 Proposal: lisp function for gtk-application-prefer-dark-theme Antono Vasiljev
2012-05-30 14:14 ` [PATCH]: " Antono Vasiljev

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).