all messages for Emacs-related lists mirrored at yhetil.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; 5+ 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] 5+ 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
  2019-06-27 15:22   ` bug#11590: " Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ 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] 5+ messages in thread

* bug#11590: [PATCH]: lisp function for gtk-application-prefer-dark-theme
  2012-05-30 14:14 ` [PATCH]: " Antono Vasiljev
@ 2019-06-27 15:22   ` Lars Ingebrigtsen
  2019-11-23 14:39     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-27 15:22 UTC (permalink / raw)
  To: Antono Vasiljev; +Cc: 11590

Antono Vasiljev <self@antono.info> writes:

>> 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).

[...]

> +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. */)

[...]

> +  g_object_set (G_OBJECT (gtk_settings),
> +                "gtk-application-prefer-dark-theme", result, NULL);

Dark mode is very trendy now, so it would be nice if Emacs had support
for telling gtk about that.  But I wonder -- would it make sense to
expose setting gtk_settings stuff more generally to the Emacs Lisp work?
And then just have a (gtk-settings "gtk-application-prefer-dark-theme")
call or something...

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#11590: [PATCH]: lisp function for gtk-application-prefer-dark-theme
  2019-06-27 15:22   ` bug#11590: " Lars Ingebrigtsen
@ 2019-11-23 14:39     ` Lars Ingebrigtsen
  2020-10-15 15:03       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2019-11-23 14:39 UTC (permalink / raw)
  To: Antono Vasiljev; +Cc: 11590

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Dark mode is very trendy now, so it would be nice if Emacs had support
> for telling gtk about that.  But I wonder -- would it make sense to
> expose setting gtk_settings stuff more generally to the Emacs Lisp work?
> And then just have a (gtk-settings "gtk-application-prefer-dark-theme")
> call or something...

A complication here is that some settings are boolean and others aren't,
so it's not that trivial, perhaps.

Anyway, I tried to redo the patch, but when I try it on my Debian laptop
(with Gnome, as far as I know), nothing happens, which is disappointing.

Is anything more needed to get dark themes working?

diff --git a/src/xsettings.c b/src/xsettings.c
index c23a5dc72c..bcdc0a12cb 100644
--- a/src/xsettings.c
+++ b/src/xsettings.c
@@ -1024,6 +1024,36 @@ DEFUN ("tool-bar-get-system-style", Ftool_bar_get_system_style,
   return Qimage;
 }
 
+DEFUN ("set-toolkit-dark-theme",
+       Fset_toolkit_dark_theme,
+       Sset_toolkit_dark_theme,
+       0, 1, 0,
+       doc: /* Alter the toolkit \"dark theme\" setting.
+If ARG is a positive number, switch the dark theme on; otherwise, switch
+it off.
+
+If the GUI toolkit used does not support altering the dark theme, an
+error will be signalled.  */)
+  (Lisp_Object arg)
+{
+#ifdef HAVE_GSETTINGS
+  gboolean dark = FALSE;
+  GtkSettings *settings = gtk_settings_get_for_screen
+    (gdk_display_get_default_screen
+     (gdk_display_get_default ()));
+
+  if (NUMBERP (arg) && XFLOATINT (arg) > 0)
+    dark = TRUE;
+
+  g_object_set (G_OBJECT (settings),
+		"gtk-application-prefer-dark-theme", dark, NULL);
+
+  return Qnil;
+#else
+  user_error ("The toolkit doesn't support altering \"dark theme\" settings");
+#endif
+}
+
 void
 syms_of_xsettings (void)
 {
@@ -1066,6 +1096,10 @@ syms_of_xsettings (void)
 #endif
 #endif
 
+#ifdef HAVE_GSETTINGS
+  defsubr (&Sset_toolkit_dark_theme);
+#endif
+
   current_tool_bar_style = Qnil;
   DEFSYM (Qtool_bar_style, "tool-bar-style");
   defsubr (&Stool_bar_get_system_style);


-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

* bug#11590: [PATCH]: lisp function for gtk-application-prefer-dark-theme
  2019-11-23 14:39     ` Lars Ingebrigtsen
@ 2020-10-15 15:03       ` Lars Ingebrigtsen
  0 siblings, 0 replies; 5+ messages in thread
From: Lars Ingebrigtsen @ 2020-10-15 15:03 UTC (permalink / raw)
  To: Antono Vasiljev; +Cc: 11590

Lars Ingebrigtsen <larsi@gnus.org> writes:

> Anyway, I tried to redo the patch, but when I try it on my Debian laptop
> (with Gnome, as far as I know), nothing happens, which is disappointing.
>
> Is anything more needed to get dark themes working?

Actually, I had it kinda backwards here, and this patch doesn't seem to
be needed (any more): Emacs switches to dark mode (for the Gtk stuff
line menus and toolbars) fine now, as far as I can see.  And being able
to notify Gtk about this from Emacs (instead of the other way around)
probably doesn't make sense anyway?  So I'm closing this bug report.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





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

end of thread, other threads:[~2020-10-15 15:03 UTC | newest]

Thread overview: 5+ 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
2019-06-27 15:22   ` bug#11590: " Lars Ingebrigtsen
2019-11-23 14:39     ` Lars Ingebrigtsen
2020-10-15 15:03       ` Lars Ingebrigtsen

Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.