Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37733403
en ru br
Репозитории ALT
S:535.104.05-alt1
5.1: 256.53-alt1.M51.1
4.1: 177.70-alt0.M41.1
4.0: 177.70-alt0.M40.1
+updates:169.07-alt1
3.0: 1.0-alt1
www.altlinux.org/Changes

Группа :: Система/Настройка/Оборудование
Пакет: nvidia-settings

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: add-error-popup.patch
Скачать


diff --git a/nvidia-settings/src/gtk+-2.x/ctkui.c b/nvidia-settings/src/gtk+-2.x/ctkui.c
index ce5ef08..85283c8 100644
--- a/nvidia-settings/src/gtk+-2.x/ctkui.c
+++ b/nvidia-settings/src/gtk+-2.x/ctkui.c
@@ -76,3 +76,16 @@ void ctk_main(ParsedAttribute *p,
 
     gtk_main();
 }
+
+void ctk_ext_display_message(const char *msg)
+{
+    GtkWidget *dlg =
+        gtk_message_dialog_new (NULL,
+                                GTK_DIALOG_MODAL,
+                                GTK_MESSAGE_ERROR,
+                                GTK_BUTTONS_OK,
+                                msg);
+
+    gtk_dialog_run(GTK_DIALOG(dlg));
+    gtk_widget_destroy (dlg);
+}
diff --git a/nvidia-settings/src/gtk+-2.x/ctkui.h b/nvidia-settings/src/gtk+-2.x/ctkui.h
index 872c48c..fc00f2e 100644
--- a/nvidia-settings/src/gtk+-2.x/ctkui.h
+++ b/nvidia-settings/src/gtk+-2.x/ctkui.h
@@ -33,5 +33,6 @@ void ctk_main(ParsedAttribute*,
               CtrlSystem*,
               const char *page);
 
+void ctk_ext_display_message(const char *msg);
 
 #endif /* __CTK_UI_H__ */
diff --git a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.c b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.c
index c3bf158..48dddfe 100644
--- a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.c
+++ b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.c
@@ -1959,3 +1959,8 @@ NvCtrlEventHandleNextEvent(NvCtrlEventHandle *handle, CtrlEvent *event)
     return NvCtrlSuccess;
 }
 
+NvCtrlErrorType last_error = NvCtrlNoError;
+
+NvCtrlErrorType NvCtrlGetLastError() {
+    return last_error;
+}
diff --git a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.h b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.h
index 636d7e2..1dc8a50 100644
--- a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.h
+++ b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributes.h
@@ -301,6 +301,10 @@ typedef enum {
     NvCtrlError
 } ReturnStatus;
 
+typedef enum {
+    NvCtrlNoError = 0,
+    NvCtrlUnableLoadInfo
+} NvCtrlErrorType;
 
 /* GLX FBConfig attribute structure */
 
@@ -865,6 +869,10 @@ NvCtrlEventHandlePending(NvCtrlEventHandle *handle, Bool *pending);
 ReturnStatus
 NvCtrlEventHandleNextEvent(NvCtrlEventHandle *handle, CtrlEvent *event);
 
-
+/*
+ * NvCtrlGetLastError() - Returns the last occurred error
+ */
+NvCtrlErrorType
+NvCtrlGetLastError();
 
 #endif /* __NVCTRL_ATTRIBUTES__ */
diff --git a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributesUtils.c b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributesUtils.c
--- a/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributesUtils.c
+++ b/nvidia-settings/src/libXNVCtrlAttributes/NvCtrlAttributesUtils.c
@@ -828,6 +828,7 @@ static const char *get_display_name(Ctrl
     }
 }
 
+extern NvCtrlErrorType last_error;
 
 static Bool load_system_info(CtrlSystem *system, const char *display)
 {
@@ -868,7 +869,7 @@ static Bool load_system_info(CtrlSystem
     system->has_nvml = (nvmlQueryTarget != NULL);
 
     if (system->has_nvml == FALSE) {
-        nv_error_msg("Unable to load info from any available system");
+        last_error = NvCtrlUnableLoadInfo;
         return FALSE;
     }
 
diff --git a/nvidia-settings/src/nvidia-settings.c b/nvidia-settings/src/nvidia-settings.c
--- a/nvidia-settings/src/nvidia-settings.c
+++ b/nvidia-settings/src/nvidia-settings.c
@@ -48,6 +48,7 @@ typedef struct {
     char *(*fn_ctk_get_display)(void);
     void (*fn_ctk_main)(ParsedAttribute *, ConfigProperties *,
                         CtrlSystem *, const char *);
+    void (*fn_ctk_ext_display_message)(const char *);
 } GtkLibraryData;
 
 
@@ -121,6 +122,10 @@ static void load_and_resolve_libdata(con
         libdata->fn_ctk_main = dlsym(libdata->gui_lib_handle, "ctk_main");
         symbol_error += check_and_save_dlerror(&libdata->error_msg);
 
+        libdata->fn_ctk_ext_display_message = dlsym(libdata->gui_lib_handle, "ctk_ext_display_message");
+        if (!libdata->fn_ctk_ext_display_message)
+            dlerror();
+
         if (symbol_error > 0 ||
             libdata->fn_ctk_init_check == NULL ||
             libdata->fn_ctk_get_display == NULL ||
@@ -326,6 +331,19 @@ int main(int argc, char **argv)
         nv_parsed_attribute_clean(p);
         system = NvCtrlGetSystem(op->ctrl_display, &systems);
         if (!system || !system->dpy) {
+            NvCtrlErrorType ec = NvCtrlGetLastError();
+            if (ec) {
+                const char *msg = "Unknown error occurred.";
+
+                switch (ec) {
+                    case NvCtrlUnableLoadInfo:
+                        msg = "Unable to load info from any available system.";
+                }
+
+                nv_error_msg(msg);
+                if (libdata.fn_ctk_ext_display_message)
+                    libdata.fn_ctk_ext_display_message(msg);
+            }
             return 1;
         }
         ret = nv_write_config_file(op->config, system, p, &conf);
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin