From 4cb6606ea23d53b8f26685bdc1fb0d90b5406e95 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Sat, 21 Aug 2010 14:13:07 +0200 Subject: [PATCH] Make nvidia_display a lua setting --- src/conky.cc | 10 ---------- src/nvidia.cc | 54 ++++++++++++++++++++++++++++++++++++++------------- src/nvidia.h | 1 - 3 files changed, 41 insertions(+), 24 deletions(-) diff --git a/src/conky.cc b/src/conky.cc index 614dce39..845b6dea 100644 --- a/src/conky.cc +++ b/src/conky.cc @@ -2537,10 +2537,6 @@ void clean_up_without_threads(void *memtofree1, void* memtofree2) free(fonts); //in set_default_configurations a font is set but not loaded font_count = -1; } - -#ifdef BUILD_NVIDIA - set_nvidia_display(NULL); -#endif #endif /* BUILD_X11 */ if (info.first_process) { @@ -2847,12 +2843,6 @@ char load_config_file(const char *f) // start the whole if-then-else-if cascade if (false) {} -#ifdef BUILD_NVIDIA - CONF("nvidia_display") { - if(value) - set_nvidia_display(value); - } -#endif CONF("imap") { if (value) { parse_global_imap_mail_args(value); diff --git a/src/nvidia.cc b/src/nvidia.cc index f28e9f7c..365d6d36 100644 --- a/src/nvidia.cc +++ b/src/nvidia.cc @@ -59,6 +59,47 @@ struct nvidia_s { static Display *nvdisplay; +namespace { + class nvidia_display_setting: public conky::simple_config_setting { + typedef conky::simple_config_setting Base; + + protected: + virtual void lua_setter(lua::state &l, bool init); + virtual void cleanup(lua::state &l); + + public: + nvidia_display_setting() + : Base("nvidia_display", std::string(), false) + {} + }; + + void nvidia_display_setting::lua_setter(lua::state &l, bool init) + { + lua::stack_sentry s(l, -2); + + Base::lua_setter(l, init); + + std::string str = do_convert(l, -1).first; + if(str.size()) { + if ((nvdisplay = XOpenDisplay(str.c_str())) == NULL) { + CRIT_ERR(NULL, NULL, "can't open nvidia display: %s", XDisplayName(str.c_str())); + } + } + } + + void nvidia_display_setting::cleanup(lua::state &l) + { + lua::stack_sentry s(l, -1); + + if(nvdisplay) { + XCloseDisplay(nvdisplay); + nvdisplay = NULL; + } + + l.pop(); + } +} + static int get_nvidia_value(QUERY_ID qid){ int tmp; Display *dpy = nvdisplay ? nvdisplay : display; @@ -133,16 +174,3 @@ void free_nvidia(struct text_object *obj) { free_and_zero(obj->data.opaque); } - -void set_nvidia_display(const char *disp) -{ - if(nvdisplay) { - XCloseDisplay(nvdisplay); - nvdisplay = NULL; - } - if(disp) { - if ((nvdisplay = XOpenDisplay(disp)) == NULL) { - CRIT_ERR(NULL, NULL, "can't open nvidia display: %s", XDisplayName(disp)); - } - } -} diff --git a/src/nvidia.h b/src/nvidia.h index 5f9d3095..1a9e1ff4 100644 --- a/src/nvidia.h +++ b/src/nvidia.h @@ -35,6 +35,5 @@ int set_nvidia_type(struct text_object *, const char *); void print_nvidia_value(struct text_object *, char *, int); void free_nvidia(struct text_object *); -void set_nvidia_display(const char *disp); #endif