summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/linux/freeze.cpp212
-rw-r--r--common/linux/freeze.h36
2 files changed, 248 insertions, 0 deletions
diff --git a/common/linux/freeze.cpp b/common/linux/freeze.cpp
new file mode 100644
index 0000000..01724a6
--- /dev/null
+++ b/common/linux/freeze.cpp
@@ -0,0 +1,212 @@
+/*
+ * A library for storing parameters in a key file
+ *
+ * This library is an analog to the windows freeze library
+ * developed by Jonathan Westhues.
+ *
+ * R Ramana, 2018
+ */
+#include "freeze.h"
+#include <linuxUI/linuxUI.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+// /*
+// * store a window's position in the registry, or fail silently if the registry calls don't work
+// */
+// void FreezeWindowPosF(HWND hwnd, char *subKey, char *name)
+// {
+// RECT r;
+// GetWindowRect(hwnd, &r);
+
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return;
+
+// char *keyName = (char *)malloc(strlen(name) + 30);
+// if(!keyName)
+// return;
+
+// HKEY sub;
+// if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_left", name);
+// if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.left), sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_right", name);
+// if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.right), sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_top", name);
+// if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.top), sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_bottom", name);
+// if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(r.bottom), sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_maximized", name);
+// DWORD v = IsZoomed(hwnd);
+// if(RegSetValueEx(sub, keyName, 0, REG_DWORD, (BYTE *)&(v), sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+
+// free(keyName);
+// }
+
+// static void Clamp(LONG *v, LONG min, LONG max)
+// {
+// if(*v < min) *v = min;
+// if(*v > max) *v = max;
+// }
+
+// /*
+// * retrieve a window's position from the registry, or do nothing if there is no info saved
+// */
+// void ThawWindowPosF(HWND hwnd, char *subKey, char *name)
+// {
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return;
+
+// HKEY sub;
+// if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS)
+// return;
+
+// char *keyName = (char *)malloc(strlen(name) + 30);
+// if(!keyName)
+// return;
+
+// DWORD l;
+// RECT r;
+
+// sprintf(keyName, "%s_left", name);
+// l = sizeof(DWORD);
+// if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.left), &l) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_right", name);
+// l = sizeof(DWORD);
+// if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.right), &l) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_top", name);
+// l = sizeof(DWORD);
+// if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.top), &l) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_bottom", name);
+// l = sizeof(DWORD);
+// if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&(r.bottom), &l) != ERROR_SUCCESS)
+// return;
+
+// sprintf(keyName, "%s_maximized", name);
+// DWORD v;
+// l = sizeof(DWORD);
+// if(RegQueryValueEx(sub, keyName, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS)
+// return;
+// if(v)
+// ShowWindow(hwnd, SW_MAXIMIZE);
+
+// RECT dr;
+// GetWindowRect(GetDesktopWindow(), &dr);
+
+// // If it somehow ended up off-screen, then put it back.
+// Clamp(&(r.left), dr.left, dr.right);
+// Clamp(&(r.right), dr.left, dr.right);
+// Clamp(&(r.top), dr.top, dr.bottom);
+// Clamp(&(r.bottom), dr.top, dr.bottom);
+// if(r.right - r.left < 100) {
+// r.left -= 300; r.right += 300;
+// }
+// if(r.bottom - r.top < 100) {
+// r.top -= 300; r.bottom += 300;
+// }
+// Clamp(&(r.left), dr.left, dr.right);
+// Clamp(&(r.right), dr.left, dr.right);
+// Clamp(&(r.top), dr.top, dr.bottom);
+// Clamp(&(r.bottom), dr.top, dr.bottom);
+
+// MoveWindow(hwnd, r.left, r.top, r.right - r.left, r.bottom - r.top, TRUE);
+
+// free(keyName);
+// }
+
+// /*
+// * store a DWORD setting in the registry
+// */
+// void FreezeDWORDF(DWORD val, char *subKey, char *name)
+// {
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return;
+
+// HKEY sub;
+// if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS)
+// return;
+
+// if(RegSetValueEx(sub, name, 0, REG_DWORD, (BYTE *)&val, sizeof(DWORD)) != ERROR_SUCCESS)
+// return;
+// }
+
+// /*
+// * retrieve a DWORD setting, or return the default if that setting is unavailable
+// */
+// DWORD ThawDWORDF(DWORD val, char *subKey, char *name)
+// {
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return val;
+
+// HKEY sub;
+// if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS)
+// return val;
+
+// DWORD l = sizeof(DWORD);
+// DWORD v;
+// if(RegQueryValueEx(sub, name, NULL, NULL, (BYTE *)&v, &l) != ERROR_SUCCESS)
+// return val;
+
+// return v;
+// }
+
+// /*
+// * store a string setting in the registry
+// */
+// void FreezeStringF(char *val, char *subKey, char *name)
+// {
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return;
+
+// HKEY sub;
+// if(RegCreateKeyEx(software, subKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &sub, NULL) != ERROR_SUCCESS)
+// return;
+
+// if(RegSetValueEx(sub, name, 0, REG_SZ, (BYTE *)val, strlen(val)+1) != ERROR_SUCCESS)
+// return;
+// }
+
+// /*
+// * retrieve a string setting, or return the default if that setting is unavailable
+// */
+// void ThawStringF(char *val, int max, char *subKey, char *name)
+// {
+// HKEY software;
+// if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_ALL_ACCESS, &software) != ERROR_SUCCESS)
+// return;
+
+// HKEY sub;
+// if(RegOpenKeyEx(software, subKey, 0, KEY_ALL_ACCESS, &sub) != ERROR_SUCCESS)
+// return;
+
+// DWORD l = max;
+// if(RegQueryValueEx(sub, name, NULL, NULL, (BYTE *)val, &l) != ERROR_SUCCESS)
+// return;
+// if(l >= (DWORD)max) return;
+
+// val[l] = '\0';
+// return;
+// }
+
diff --git a/common/linux/freeze.h b/common/linux/freeze.h
new file mode 100644
index 0000000..892b5b1
--- /dev/null
+++ b/common/linux/freeze.h
@@ -0,0 +1,36 @@
+/*
+ * A library for storing parameters in a key file
+ *
+ * This library is an analog to the windows freeze library
+ * developed by Jonathan Westhues.
+ *
+ * R Ramana, 2018
+ */
+
+#ifndef __FREEZE_H
+#define __FREEZE_H
+
+// #ifndef FREEZE_SUBKEY
+// #error must define FREEZE_SUBKEY to a string uniquely identifying the app
+// #endif
+
+// #define FreezeWindowPos(hwnd) FreezeWindowPosF(hwnd, FREEZE_SUBKEY, #hwnd)
+// void FreezeWindowPosF(HWND hWnd, char *subKey, char *name);
+
+// #define ThawWindowPos(hwnd) ThawWindowPosF(hwnd, FREEZE_SUBKEY, #hwnd)
+// void ThawWindowPosF(HWND hWnd, char *subKey, char *name);
+
+// #define FreezeDWORD(val) FreezeDWORDF(val, FREEZE_SUBKEY, #val)
+// void FreezeDWORDF(DWORD val, char *subKey, char *name);
+
+// #define ThawDWORD(val) val = ThawDWORDF(val, FREEZE_SUBKEY, #val)
+// DWORD ThawDWORDF(DWORD val, char *subKey, char *name);
+
+// #define FreezeString(val) FreezeStringF(val, FREEZE_SUBKEY, #val)
+// void FreezeStringF(char *val, char *subKey, char *name);
+
+// #define ThawString(val, max) ThawStringF(val, max, FREEZE_SUBKEY, #val)
+// void ThawStringF(char *val, int max, char *subKey, char *name);
+
+
+#endif