INT_PTR PluginCommand_SetMyStatusMessageUI(WPARAM wParam, LPARAM lParam) { int status = (int)wParam; char *proto_name = (char *)lParam; int proto_num = -1; Protocol *proto = NULL; if (status != 0 && (status < ID_STATUS_OFFLINE || status > ID_STATUS_OUTTOLUNCH)) return -10; if (proto_name != NULL) { for (int i = 0; i < protocols->GetSize(); i++) { proto = protocols->Get(i); if (mir_strcmpi(proto->name, proto_name) == 0) { proto_num = i; break; } } if (proto_num == -1) return -1; if (protocols->CanSetStatusMsgPerProtocol() && !proto->CanSetStatusMsg()) return -2; } else if (ServiceExists(MS_SIMPLESTATUSMSG_CHANGESTATUSMSG)) { if (status != 0) CallService(MS_SIMPLESTATUSMSG_CHANGESTATUSMSG, status, (LPARAM)proto_name); else if (proto != 0) CallService(MS_SIMPLESTATUSMSG_CHANGESTATUSMSG, proto->status, (LPARAM)proto_name); else CallService(MS_SIMPLESTATUSMSG_CHANGESTATUSMSG, protocols->GetGlobalStatus(), NULL); return 0; } // fallthrough if (proto == NULL || proto->status != ID_STATUS_OFFLINE) { if (!status_msg_dialog_open) { InterlockedExchange(&status_msg_dialog_open, 1); hwndSetStatusMsg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_SETSTATUSMESSAGE), NULL, DlgProcSetStatusMessage); SendMessage(hwndSetStatusMsg, WMU_SETDATA, status, proto_num); } SetForegroundWindow(hwndSetStatusMsg); SetFocus(hwndSetStatusMsg); ShowWindow(hwndSetStatusMsg, SW_SHOW); return 0; } return -3; }