Репозитории 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 |
Группа :: Система/Настройка/Оборудование
Пакет: 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);