From cef3db9fe76203e5796e04f4886393b430d8f2e1 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Tue, 29 Oct 2019 20:26:38 +1100 Subject: [PATCH] Add an icon for linux and use it --- misc/CCicon_nix32 | Bin 0 -> 22312 bytes misc/CCicon_nix64 | Bin 0 -> 44160 bytes misc/buildbot.sh | 7 ++++-- misc/linux_icon_gen.cs | 39 ++++++++++++++++++++++++++++ src/Http.c | 56 ++++++++++++++++++++--------------------- src/Window.c | 8 ++++++ 6 files changed, 80 insertions(+), 30 deletions(-) create mode 100644 misc/CCicon_nix32 create mode 100644 misc/CCicon_nix64 create mode 100644 misc/linux_icon_gen.cs diff --git a/misc/CCicon_nix32 b/misc/CCicon_nix32 new file mode 100644 index 0000000000000000000000000000000000000000..a7092a9bfaa63961ae3ce98425127ebd0d7b20c6 GIT binary patch literal 22312 zcmd^{$#2xj6~~*{7?V>*N~B21!8yf9Ok+nDkRg#;BFQLH!X+WOM9Kg`n$ZZ51|wy1 z$Q+5_o=YzI3xErdpn#iw-}imr_kHJ=`n3Jb>(^Dk`n7-E#+aW}uI*L5_kHz#uj*G- z?Qeehn_rC?Go~QVm_ke8ZLUx__WS;to=VhN_;z8OkXGW7`%8F-&rcoi|F}?gq2$7c z@__rlE+i(DUB2YPXnjJstseTE0!pJu30~Y?U0untWy_M4D_15{rcALqAYXQ&Zv0vm7RK9$TkC*yiaqqXK1(i))F(LJ*ts2V zi`(W?>|vzoA=h|Y+%}(L4`pWvrFUoy4IOWb+vZoTS{3pS!)*`V@$T;KuK4qM?cCyw z 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 < list->Capacity) return; - Utils_Resize((void**)&list->Entries, &list->Capacity, + if (list->count < list->capacity) return; + Utils_Resize((void**)&list->entries, &list->capacity, sizeof(struct HttpRequest), HTTP_DEF_ELEMS, 10); } /* Adds another request to end (for normal priority request) */ static void RequestList_Append(struct RequestList* list, struct HttpRequest* item) { RequestList_EnsureSpace(list); - list->Entries[list->Count++] = *item; + list->entries[list->count++] = *item; } /* Inserts a request at start (for high priority request) */ @@ -65,21 +65,21 @@ static void RequestList_Prepend(struct RequestList* list, struct HttpRequest* it int i; RequestList_EnsureSpace(list); - for (i = list->Count; i > 0; i--) { - list->Entries[i] = list->Entries[i - 1]; + for (i = list->count; i > 0; i--) { + list->entries[i] = list->entries[i - 1]; } - list->Entries[0] = *item; - list->Count++; + list->entries[0] = *item; + list->count++; } /* Removes the request at the given index */ static void RequestList_RemoveAt(struct RequestList* list, int i) { - if (i < 0 || i >= list->Count) Logger_Abort("Tried to remove element at list end"); + if (i < 0 || i >= list->count) Logger_Abort("Tried to remove element at list end"); - for (; i < list->Count - 1; i++) { - list->Entries[i] = list->Entries[i + 1]; + for (; i < list->count - 1; i++) { + list->entries[i] = list->entries[i + 1]; } - list->Count--; + list->count--; } /* Finds index of request whose id matches the given id */ @@ -87,11 +87,11 @@ static int RequestList_Find(struct RequestList* list, const String* id, struct H String reqID; int i; - for (i = 0; i < list->Count; i++) { - reqID = String_FromRawArray(list->Entries[i].ID); + for (i = 0; i < list->count; i++) { + reqID = String_FromRawArray(list->entries[i].ID); if (!String_Equals(id, &reqID)) continue; - *item = list->Entries[i]; + *item = list->entries[i]; return i; } return -1; @@ -99,14 +99,14 @@ static int RequestList_Find(struct RequestList* list, const String* id, struct H /* Resets state to default */ static void RequestList_Init(struct RequestList* list) { - list->Capacity = HTTP_DEF_ELEMS; - list->Count = 0; - list->Entries = list->DefaultEntries; + list->capacity = HTTP_DEF_ELEMS; + list->count = 0; + list->entries = list->defaultEntries; } /* Frees any dynamically allocated memory, then resets state to default */ static void RequestList_Free(struct RequestList* list) { - if (list->Entries != list->DefaultEntries) Mem_Free(list->Entries); + if (list->entries != list->defaultEntries) Mem_Free(list->entries); RequestList_Init(list); } @@ -207,7 +207,7 @@ static void Http_CompleteRequest(struct HttpRequest* req) { } else { /* normal case, replace older req */ HttpRequest_Free(&older); - processedReqs.Entries[index] = *req; + processedReqs.entries[index] = *req; } } else { RequestList_Append(&processedReqs, req); @@ -242,8 +242,8 @@ static void Http_CleanCacheTask(struct ScheduledTask* task) { Mutex_Lock(processedMutex); { TimeMS now = DateTime_CurrentUTC_MS(); - for (i = processedReqs.Count - 1; i >= 0; i--) { - item = &processedReqs.Entries[i]; + for (i = processedReqs.count - 1; i >= 0; i--) { + item = &processedReqs.entries[i]; if (item->TimeDownloaded + (10 * 1000) >= now) continue; HttpRequest_Free(item); @@ -334,11 +334,11 @@ static void Http_AddHeader(const char* key, const String* value); static void Http_DownloadNextAsync(void) { struct HttpRequest req; - if (http_terminate || !pendingReqs.Count) return; + if (http_terminate || !pendingReqs.count) return; /* already working on a request currently */ if (http_curRequest.ID[0] != '\0') return; - req = pendingReqs.Entries[0]; + req = pendingReqs.entries[0]; RequestList_RemoveAt(&pendingReqs, 0); Http_DownloadAsync(&req); } @@ -845,8 +845,8 @@ static void Http_WorkerLoop(void) { Mutex_Lock(pendingMutex); { stop = http_terminate; - if (!stop && pendingReqs.Count) { - request = pendingReqs.Entries[0]; + if (!stop && pendingReqs.count) { + request = pendingReqs.entries[0]; hasRequest = true; RequestList_RemoveAt(&pendingReqs, 0); } diff --git a/src/Window.c b/src/Window.c index ce85719b0..7d325f272 100644 --- a/src/Window.c +++ b/src/Window.c @@ -929,6 +929,14 @@ void Window_Create(int width, int height) { Window_RefreshBounds(width, height); Window_Exists = true; Window_Handle = (void*)win_handle; + +#ifdef CC_BUILD_X11ICON + Atom net_wm_icon = XInternAtom(win_display, "_NET_WM_ICON", false); + Atom xa_cardinal = XInternAtom(win_display, "CARDINAL", false); + extern const long CCIcon_Data[]; + extern const int CCIcon_Size; + XChangeProperty(win_display, win_handle, net_wm_icon, xa_cardinal, 32, PropModeReplace, CCIcon_Data, CCIcon_Size); +#endif } void Window_SetTitle(const String* title) {