summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp')
-rw-r--r--plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp184
1 files changed, 184 insertions, 0 deletions
diff --git a/plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp b/plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp
new file mode 100644
index 0000000000..153289166f
--- /dev/null
+++ b/plugins/!NotAdopted/MagneticWindows/MagneticWindows.cpp
@@ -0,0 +1,184 @@
+#include "MagneticWindowsCore.h"
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+//
+// Magnetic Windows
+//
+// Autor: Michael Kunz
+// EMail: Michael.Kunz@s2005.tu-chemnitz.de
+//
+//
+// thanks to: pescuma
+//
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Variables
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+PLUGININFO pluginInfo = {
+ sizeof(PLUGININFO),
+ "Magnetic Windows",
+ PLUGIN_MAKE_VERSION(0,0,3,2),
+ "Makes the main contactlist and the chat windows snapping to the desktop border and to each other.",
+ "Michael Kunz",
+ "Michael.Kunz@s2005.TU-Cemnitz.de",
+ "(c) 2006 Michael Kunz",
+ "http://addons.miranda-im.org/details.php?action=viewfile&id=2871",
+ 0,
+ 0
+};
+
+PLUGINLINK * pluginLink;
+
+HANDLE hLoadedHook, hShootDownHook, hAddService, hRemService, hWindowEventHook;
+
+HINSTANCE hInst;
+//char ModuleName[256];
+char ModuleName[] = "MagneticWindows";
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Plugin Functions
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+//For other Plugins to start snapping for other Windows
+int SnapPluginWindowStart(WPARAM wParam, LPARAM lParam) {
+
+ if (!WindowOpen((HWND)wParam)) return 1;
+
+ return 0;
+}
+//For other Plugins to stop snapping for other Windows
+int SnapPluginWindowStop(WPARAM wParam, LPARAM lParam) {
+
+ if (!WindowClose((HWND)wParam)) return 1;
+
+ return 0;
+}
+
+int PluginMessageWindowEvent(WPARAM wParam, LPARAM lParam) {
+ MessageWindowEventData* Data;
+ HWND hWndParent, hWnd;
+
+ Data = (MessageWindowEventData*)(lParam);
+
+ switch (Data->uType) {
+ case MSG_WINDOW_EVT_OPEN:
+ hWnd = Data->hwndWindow;
+ //WindowOpen(hWnd);
+ hWndParent = GetParent(hWnd);
+ while ((hWndParent != 0) && (hWndParent != GetDesktopWindow()) && (IsWindowVisible(hWndParent))) {
+ hWnd = hWndParent;
+ hWndParent = GetParent(hWnd);
+ }
+
+ WindowOpen(hWnd);
+ break;
+
+ case MSG_WINDOW_EVT_CLOSING:
+ WindowClose(Data->hwndWindow);
+ break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Main Functions
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+int SnapPluginStart(WPARAM wParam, LPARAM lParam) {
+
+ LoadOptions();
+
+ hWindowEventHook = HookEvent(ME_MSG_WINDOWEVENT, PluginMessageWindowEvent);
+
+ WindowOpen((HWND)CallService(MS_CLUI_GETHWND,0,0));
+ return 0;
+}
+
+int SnapPluginShootDown(WPARAM wParam, LPARAM lParam) {
+ UnhookEvent(hWindowEventHook);
+ UnhookEvent(hLoadedHook);
+ UnhookEvent(hShootDownHook);
+ UnhookEvent(hInitOptionsHook);
+
+ WindowCloseAll();
+
+ DestroyServiceFunction(hAddService);
+ DestroyServiceFunction(hRemService);
+ DestroyServiceFunction(hSnapToListService);
+
+ return 0;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// Exportet Functions
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+extern "C" __declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+{
+ return &pluginInfo;
+}
+
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
+{
+ pluginLink = link;
+
+ hLoadedHook = HookEvent(ME_SYSTEM_MODULESLOADED, SnapPluginStart);
+ hShootDownHook = HookEvent(ME_SYSTEM_PRESHUTDOWN, SnapPluginShootDown);
+ hInitOptionsHook = HookEvent(ME_OPT_INITIALISE, InitOptions);
+
+ hAddService = CreateServiceFunction(MS_MW_ADDWINDOW, SnapPluginWindowStart);
+ hRemService = CreateServiceFunction(MS_MW_REMWINDOW, SnapPluginWindowStop);
+ hSnapToListService = CreateServiceFunction(MS_MW_SNAPTOLIST, SnapToList);
+
+ return 0;
+}
+
+extern "C" int __declspec(dllexport) Unload(void)
+{
+ return 0;
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// DLL MAIN
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+extern "C" bool APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ hInst = hModule;
+
+
+/* char * Temp;
+ char * l,i;
+
+ Temp = (char*) malloc(2048);
+ GetModuleFileName(hModule, Temp, 2048);
+
+ l = Temp;
+ i = Temp;
+
+ while (i != 0) {
+ if ((*i) == '\') l = i + 1;
+ i++;
+ }
+
+ memcpy(ModuleName, l, i-l);
+ free(Temp);
+ */
+
+ return true;
+}