예제 #1
0
파일: main.c 프로젝트: kuailexs/jwm
/** Clean up memory.
 * This is called after the X connection is closed.
 * Note that it is possible for this to be called more than once.
 */
void Destroy(void)
{
   DestroyBackgrounds();
   DestroyBorders();
   DestroyClients();
   DestroyClock();
   DestroyColors();
   DestroyCommands();
   DestroyCursors();
   DestroyDesktops();
#ifndef DISABLE_CONFIRM
   DestroyDialogs();
#endif
   DestroyDock();
   DestroyFonts();
   DestroyGroups();
   DestroyHints();
   DestroyIcons();
   DestroyKeys();
   DestroyPager();
   DestroyPlacement();
   DestroyPopup();
   DestroyRootMenu();
   DestroyScreens();
   DestroySettings();
   DestroySwallow();
   DestroyTaskBar();
   DestroyTray();
   DestroyTrayButtons();
}
예제 #2
0
파일: Clipboard.c 프로젝트: embassy/AkelPad
//Plugin extern function
void __declspec(dllexport) Capture(PLUGINDATA *pd)
{
  pd->dwSupport|=PDS_SUPPORTALL;
  if (pd->dwSupport & PDS_GETSUPPORT)
    return;

  if (!bInitCommon)
    InitCommon(pd);
  else if (!bInitCapture)
    ReadOptions(OF_CAPTURE);

  if (bInitCapture)
  {
    DestroyDock(hWndCaptureDlg, DKT_KEEPAUTOLOAD);

    //Stay in memory and show as non-active
    pd->nUnload=UD_NONUNLOAD_NONACTIVE;
  }
  else
  {
    InitMain();
    InitCapture();

    pfCapture=pd->lpPluginFunction;
    bCaptureDockWaitResize=pd->bOnStart;
    CreateDock(&hWndCaptureDlg, &dkCaptureDlg, !bCaptureDockWaitResize);

    //Stay in memory, and show as active
    pd->nUnload=UD_NONUNLOAD_ACTIVE;
  }
}
예제 #3
0
파일: Clipboard.c 프로젝트: embassy/AkelPad
LRESULT CALLBACK NewMainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  //Capture
  if (uMsg == WM_CHANGECBCHAIN)
  {
    if (bInitCapture)
    {
      if (hWndNextViewer == (HWND)wParam)
        hWndNextViewer=(HWND)lParam;
      else if (hWndNextViewer && IsWindow(hWndNextViewer))
        SendMessage(hWndNextViewer, uMsg, wParam, lParam);
    }
  }
  else if (uMsg == WM_DRAWCLIPBOARD)
  {
    if (bInitCapture)
    {
      if (hWndCaptureDlg)
      {
        if (GetFocus() != hWndCaptureEdit)
        {
          if (!cfSelAutoCopy || !IsClipboardFormatAvailable(cfSelAutoCopy))
          {
            SendMessage(hWndCaptureEdit, EM_SETSEL, (WPARAM)0x7FFFFFFF, (LPARAM)0x7FFFFFFF);
            SendMessage(hMainWnd, AKD_PASTE, (WPARAM)hWndCaptureEdit, 0);
            SendMessage(hWndCaptureEdit, EM_SETSEL, (WPARAM)0x7FFFFFFF, (LPARAM)0x7FFFFFFF);
            SendMessage(hMainWnd, AKD_REPLACESELW, (WPARAM)hWndCaptureEdit, (LPARAM)wszCaptureSeparator);
          }
        }
      }
      if (hWndNextViewer && IsWindow(hWndNextViewer))
        SendMessage(hWndNextViewer, uMsg, wParam, lParam);
    }
  }

  //PasteSerial
  else if (uMsg == WM_HOTKEY)
  {
    if (bInitPasteSerial)
    {
      char *szSerial=NULL;
      char *pSerial=NULL;
      HWND hWndTargetForeground;
      HWND hWndTargetFocus;
      DWORD dwTargetForeground;
      DWORD dwThreadCurrent;
      WORD wVk;
      int nInsertType=0;

      if (GetHotkeyMod(dwHotkeyDelimSkip) == LOWORD(lParam) && LOBYTE(dwHotkeyDelimSkip) == HIWORD(lParam))
        nInsertType=IT_DELIM_SKIP;
      else if (GetHotkeyMod(dwHotkeyDelimAsTab) == LOWORD(lParam) && LOBYTE(dwHotkeyDelimAsTab) == HIWORD(lParam))
        nInsertType=IT_DELIM_ASTAB;
      else if (GetHotkeyMod(dwHotkeyDelimAsIs) == LOWORD(lParam) && LOBYTE(dwHotkeyDelimAsIs) == HIWORD(lParam))
        nInsertType=IT_DELIM_ASIS;

      if (nInsertType)
      {
        hWndTargetForeground=GetForegroundWindow();
        dwTargetForeground=GetWindowThreadProcessId(hWndTargetForeground, NULL);
        dwThreadCurrent=GetCurrentThreadId();

        if (dwThreadCurrent != dwTargetForeground)
        {
          if (AttachThreadInput(dwThreadCurrent, dwTargetForeground, TRUE))
          {
            WaitForReleaseVkKeys(dwThreadCurrent, dwTargetForeground, INFINITE);

            if (hWndTargetFocus=GetFocus())
            {
              //Get clipboard text
              {
                HGLOBAL hData;
                LPVOID pData;
                int nDataLen;

                if (OpenClipboard(NULL))
                {
                  if (hData=GetClipboardData(CF_TEXT))
                  {
                    if (pData=GlobalLock(hData))
                    {
                      nDataLen=lstrlenA((char *)pData) + 1;

                      if (szSerial=(char *)GlobalAlloc(GPTR, nDataLen))
                      {
                        lstrcpynA(szSerial, (char *)pData, nDataLen);
                      }
                      GlobalUnlock(hData);
                    }
                  }
                  CloseClipboard();
                }
              }

              //Post serial
              if (szSerial)
              {
                pSerial=szSerial;

                while (*pSerial && *pSerial != '\n')
                {
                  if (nInsertType != IT_DELIM_ASIS)
                  {
                    if (*pSerial == '-' || *pSerial == ' ' || *pSerial == '\t')
                    {
                      if (nInsertType == IT_DELIM_ASTAB)
                      {
                        if (GetFocus() == hWndTargetFocus)
                        {
                          if (bEmulatePress)
                          {
                            WaitForReleaseVkKeys(dwThreadCurrent, dwTargetForeground, INFINITE);
                            keybd_event(VK_TAB, 0, KEYEVENTF_EXTENDEDKEY, 0);
                            keybd_event(VK_TAB, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
                            WaitForReleaseVkKeys(dwThreadCurrent, dwTargetForeground, INFINITE);
                          }
                          else SendMessage(hWndTargetFocus, WM_CHAR, '\t', 1);
                        }
                      }
                      while (*++pSerial == '-' || *pSerial == ' ' || *pSerial == '\t');
                      hWndTargetFocus=GetFocus();
                      continue;
                    }
                  }

                  if (bEmulatePress)
                  {
                    wVk=VkKeyScan(*pSerial);

                    WaitForReleaseVkKeys(dwThreadCurrent, dwTargetForeground, INFINITE);
                    if (HIBYTE(wVk) & 1)
                      keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
                    if (HIBYTE(wVk) & 2)
                      keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0);
                    if (HIBYTE(wVk) & 4)
                      keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY, 0);
                    keybd_event(LOBYTE(wVk), 0, 0, 0);
                    keybd_event(LOBYTE(wVk), 0, KEYEVENTF_KEYUP, 0);
                    if (HIBYTE(wVk) & 4)
                      keybd_event(VK_MENU, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
                    if (HIBYTE(wVk) & 2)
                      keybd_event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
                    if (HIBYTE(wVk) & 1)
                      keybd_event(VK_SHIFT, 0, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0);
                    WaitForReleaseVkKeys(dwThreadCurrent, dwTargetForeground, INFINITE);
                  }
                  else SendMessage(hWndTargetFocus, WM_CHAR, *pSerial, 1);

                  ++pSerial;
                }
                GlobalFree((HGLOBAL)szSerial);
                szSerial=NULL;
              }
            }
            AttachThreadInput(dwThreadCurrent, dwTargetForeground, FALSE);
          }
        }
      }
    }
  }

  //Notifications
  else if (uMsg == AKDN_DOCK_RESIZE)
  {
    if (bInitCapture)
    {
      if (((DOCK *)wParam)->hWnd == dkCaptureDlg->hWnd)
        dwSaveFlags|=OF_CAPTURE_RECT;
    }
  }
  else if (uMsg == AKDN_SIZE_ONSTART)
  {
    if (bInitCapture)
    {
      if (bCaptureDockWaitResize)
      {
        bCaptureDockWaitResize=FALSE;
        ShowWindow(hWndCaptureDlg, SW_SHOW);
        dkCaptureDlg->dwFlags&=~DKF_HIDDEN;
      }
    }
  }
  if (uMsg == AKDN_MAIN_ONSTART_FINISH)
  {
  }
  else if (uMsg == AKDN_MAIN_ONFINISH)
  {
    NewMainProcData->NextProc(hWnd, uMsg, wParam, lParam);

    if (hWndCaptureDlg)
    {
      DestroyDock(hWndCaptureDlg, DKT_ONMAINFINISH);
    }
    if (bInitPasteSerial)
    {
      UninitMain();
      UninitPasteSerial();
    }
    if (bInitSelAutoCopy)
    {
      UninitMain();
      UninitSelAutoCopy();
    }
    return FALSE;
  }

  //Special messages
  {
    LRESULT lResult;

    if (lResult=EditParentMessages(hWnd, uMsg, wParam, lParam))
      return lResult;
  }

  //Call next procedure
  return NewMainProcData->NextProc(hWnd, uMsg, wParam, lParam);
}