Thread: [Mplayerplug-in-cvs] mplayerplug-in/Source mplayerplug-in.c,1.149,1.150 mplayerplug-in.h,1.39,1.40 s
Brought to you by:
kdekorte
From: <kde...@pr...> - 2004-01-26 17:17:33
|
Update of /cvsroot/mplayerplug-in/mplayerplug-in/Source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24802/Source Modified Files: mplayerplug-in.c mplayerplug-in.h support.c ui.c Log Message: Fix UI crasher FreeUI was called with uninitialized pointers Parse mplayer output to determine the actual size and play size of the media Support RealMedia with embedded rtsp streams, allows NASA TV to work needs enable-real=1 in mplayerplug-in.conf mplayer with RealMedia codecs and support Fix possible crash in NPP_Destroy Change buildPlaylist to be called from NPP_DestroyStream rather than after a magic value in NPP_Write This way we are sure we have the entire playlist downloaded. Found possible crash in smil format decode Added stat.c to make Solaris compile work Fixed bug in getURLBase Fixed handling of This->baseurl Fixed crash in ASX format handling, should fix http://www.rbcmp3.com Index: mplayerplug-in.c =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/mplayerplug-in.c,v retrieving revision 1.149 retrieving revision 1.150 diff -C2 -d -r1.149 -r1.150 *** mplayerplug-in.c 22 Jan 2004 01:55:00 -0000 1.149 --- mplayerplug-in.c 26 Jan 2004 17:16:34 -0000 1.150 *************** *** 415,418 **** --- 415,421 ---- This = (PluginInstance *) instance->pdata; + if (This == NULL) + return NPERR_NO_ERROR; // localdata already destroyed + pthread_mutex_lock(&(This->playlist_mutex)); DESTROYED = 1; *************** *** 624,627 **** --- 627,633 ---- } + if (This->baseurl == NULL) + This->baseurl = getURLBase((char *) stream->url); + if (This->mode == NP_FULL) { This->url = strdup(stream->url); *************** *** 718,722 **** } ! if (n->totalbytes != stream->end) n->totalbytes = stream->end; pthread_mutex_unlock(&(This->playlist_mutex)); return STREAMBUFSIZE; --- 724,729 ---- } ! if (n->totalbytes != stream->end) ! n->totalbytes = stream->end; pthread_mutex_unlock(&(This->playlist_mutex)); return STREAMBUFSIZE; *************** *** 735,739 **** // } addToEnd(This->td->list, n); ! if (n->totalbytes != stream->end) n->totalbytes = stream->end; pthread_mutex_unlock(&(This->playlist_mutex)); return STREAMBUFSIZE; --- 742,747 ---- // } addToEnd(This->td->list, n); ! if (n->totalbytes != stream->end) ! n->totalbytes = stream->end; pthread_mutex_unlock(&(This->playlist_mutex)); return STREAMBUFSIZE; *************** *** 753,756 **** --- 761,765 ---- Node *n, *hrefnode; char message[1024]; + char *baseurl; if (instance == NULL) *************** *** 774,778 **** if (This->td == NULL) return -1; - pthread_mutex_lock(&(This->playlist_mutex)); // find the node that matches the URL and open the file name in it. --- 783,786 ---- *************** *** 781,789 **** currdownload = 0; maxdownload = 0; ! for(n = This->td->list;n != NULL;n = n->next) { //if (URLcmp(n->url, stream->url) == 0) continue; //if (strstr(stream->url, n->url) == NULL) continue; ! if (n->play == 0) continue; ! if (n->cancelled) continue; currdownload += n->bytes; maxdownload += n->totalbytes; --- 789,799 ---- currdownload = 0; maxdownload = 0; ! for (n = This->td->list; n != NULL; n = n->next) { //if (URLcmp(n->url, stream->url) == 0) continue; //if (strstr(stream->url, n->url) == NULL) continue; ! if (n->play == 0) ! continue; ! if (n->cancelled) ! continue; currdownload += n->bytes; maxdownload += n->totalbytes; *************** *** 801,812 **** } ! if (n == NULL || n->cancelled) { pthread_mutex_unlock(&(This->playlist_mutex)); return -1; } else { if (n->status != STATE_CANCELLED) { fp = fopen(n->fname, "a+"); ! fflush(stdout); fseek(fp, offset, SEEK_SET); ret = fwrite(buffer, 1, len, fp); --- 811,829 ---- } ! if (n == NULL) { pthread_mutex_unlock(&(This->playlist_mutex)); return -1; } else { + if (n->cancelled == 1) { + pthread_mutex_unlock(&(This->playlist_mutex)); + return -1; + } if (n->status != STATE_CANCELLED) { fp = fopen(n->fname, "a+"); ! if (fp == NULL) { ! pthread_mutex_unlock(&(This->playlist_mutex)); ! return -1; ! } fseek(fp, offset, SEEK_SET); ret = fwrite(buffer, 1, len, fp); *************** *** 852,866 **** } - if (n->status != STATE_DOWNLOADED_ENOUGH) { ! if (This->baseurl == NULL) ! This->baseurl = getURLBase(n->url); ! if (DEBUG) ! printf("calling buildPlaylist with filename %s\n", ! n->fname); ! if (!isMms(n->url)) { ! buildPlaylist(instance, n->fname, n); ! } else { n->mmsstream = 1; } --- 869,888 ---- } if (n->status != STATE_DOWNLOADED_ENOUGH) { ! baseurl = getURLBase(n->url); ! if (baseurl != NULL) { ! if (This->baseurl == NULL) { ! This->baseurl = baseurl; ! } else { ! if (strcmp(This->baseurl, baseurl) != 0) { ! NPN_MemFree(This->baseurl); ! This->baseurl = baseurl; ! } else { ! NPN_MemFree(baseurl); ! } ! } ! } ! if (isMms(n->url)) { n->mmsstream = 1; } *************** *** 894,897 **** --- 916,920 ---- n->status = STATE_DOWNLOADED_ENOUGH; pthread_mutex_unlock(&(This->playlist_mutex)); + return ret; } *************** *** 944,947 **** --- 967,979 ---- n->retrieved = 1; + if (!isMms(n->url)) { + if (DEBUG) + printf("calling buildPlaylist with filename %s\n", + n->fname); + buildPlaylist(instance, n->fname, n); + } else { + n->mmsstream = 1; + } + // test for all retrieved if (This->threadsignaled == 0) { *************** *** 1084,1087 **** --- 1116,1121 ---- pthread_mutex_lock(&(This->playlist_mutex)); + // Free any UI data necessary + FreeUI((Display *) This->display); XtRemoveCallback(This->netscape_widget, XtNdestroyCallback, DestroyCB, (XtPointer) This); *************** *** 1129,1137 **** if (n->mmsstream == 1) snprintf(cmd, 2000, ! "ps -eaf | grep mplayer | grep %s | awk '{print $2}' | xargs kill -9", n->url); else snprintf(cmd, 2000, ! "ps -eaf | grep mplayer | grep %s | awk '{print $2}' | xargs kill -9", n->fname); ps = popen(cmd, "r"); --- 1163,1171 ---- if (n->mmsstream == 1) snprintf(cmd, 2000, ! "ps -eaf | grep mplayer | grep %s | grep -v grep | awk '{print $2}' | xargs kill -9", n->url); else snprintf(cmd, 2000, ! "ps -eaf | grep mplayer | grep %s | grep -v grep | awk '{print $2}' | xargs kill -9", n->fname); ps = popen(cmd, "r"); *************** *** 1174,1179 **** This->td->instance = NULL; pthread_mutex_unlock(&(This->playlist_mutex)); - // Free any UI data necessary - FreeUI((Display *) This->display); } else { if (DEBUG) --- 1208,1211 ---- *************** *** 1219,1222 **** --- 1251,1255 ---- char xval[32], yval[32], yval2[32]; char *filename; + char *baseurl; if (DEBUG) *************** *** 1264,1269 **** } ! This->baseurl = getURLBase(This->td->list->url); ! This->hostname = getURLHostname(This->td->list->url); if (This->keep_download == 1) { This->td->list->delete = 0; --- 1297,1317 ---- } ! baseurl = getURLBase(This->td->list->url); ! if (baseurl != NULL) { ! if (This->baseurl == NULL) { ! This->baseurl = baseurl; ! } else { ! if (strcmp(This->baseurl, baseurl) != 0) { ! NPN_MemFree(This->baseurl); ! This->baseurl = baseurl; ! } else { ! NPN_MemFree(baseurl); ! } ! } ! } ! ! if (This->hostname == NULL) ! This->hostname = getURLHostname(This->td->list->url); ! if (This->keep_download == 1) { This->td->list->delete = 0; Index: mplayerplug-in.h =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/mplayerplug-in.h,v retrieving revision 1.39 retrieving revision 1.40 diff -C2 -d -r1.39 -r1.40 *** mplayerplug-in.h 22 Jan 2004 01:55:00 -0000 1.39 --- mplayerplug-in.h 26 Jan 2004 17:16:35 -0000 1.40 *************** *** 76,79 **** --- 76,81 ---- long int bytes; long int totalbytes; + int actual_x, actual_y; + int play_x, play_y; struct lnode *next; } Node; Index: support.c =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/support.c,v retrieving revision 1.76 retrieving revision 1.77 diff -C2 -d -r1.76 -r1.77 *** support.c 22 Jan 2004 05:03:42 -0000 1.76 --- support.c 26 Jan 2004 17:16:35 -0000 1.77 *************** *** 82,85 **** --- 82,86 ---- This->hrefrequested = 0; This->lastmessage = (char *) NPN_MemAlloc(sizeof(char) * 1024); + snprintf(This->lastmessage,1,""); pthread_mutex_init(&(This->playlist_mutex), NULL); This->fifoname = tempnam("/tmp", "fifoXXXXXX"); *************** *** 395,399 **** if (DEBUG) ! printf("in getURLBase\n"); if (url == NULL) return NULL; --- 396,400 ---- if (DEBUG) ! printf("in getURLBase url: %s\n", url); if (url == NULL) return NULL; *************** *** 402,407 **** base = NPN_MemAlloc(sizeof(char) * (strlen(url) + 1)); strcpy(base, url); ! for (i = strlen(url) - 1; i > 0; i--) { if (base[i] != '/') { base[i] = '\0'; --- 403,410 ---- base = NPN_MemAlloc(sizeof(char) * (strlen(url) + 1)); strcpy(base, url); + if (DEBUG) + printf("in getURLBase base: %s\n", base); ! for (i = strlen(url) - 1; i >= 0; i--) { if (base[i] != '/') { base[i] = '\0'; *************** *** 522,525 **** --- 525,534 ---- n->retrieved = 0; n->cancelled = 0; + n->bytes = 0; + n->totalbytes = 0; + n->actual_x = 0; + n->actual_y = 0; + n->play_x = 0; + n->play_y = 0; n->next = NULL; return n; *************** *** 554,557 **** --- 563,567 ---- dest->delete = src->delete; dest->cancelled = src->cancelled; + dest->retrieved = dest->retrieved; } } *************** *** 576,579 **** --- 586,592 ---- printf("retrieved: %i\n", l->retrieved); printf("mms stream: %i\n", l->mmsstream); + printf("Actual Size: %ix%i\n", l->actual_x, l->actual_y); + printf("Play Size: %ix%i\n", l->play_x, l->play_y); + } if ((l->delete == 1) || (l->delete == 0 && l->play == 0)) { *************** *** 645,650 **** if (item[0] != '/') { strlcpy(tmpdir, item, sizeof(tmpdir)); // reuse the buffer ! if (This->baseurl != NULL) strlcpy(localitem, This->baseurl, 1024); strlcat(localitem, tmpdir, 1024); } else { --- 658,670 ---- if (item[0] != '/') { strlcpy(tmpdir, item, sizeof(tmpdir)); // reuse the buffer ! if (This->baseurl != NULL) { strlcpy(localitem, This->baseurl, 1024); + } else { + // if (This->url != NULL) + // This->baseurl = getURLBase(This->url); + // if (This->href != NULL) + // This->baseurl = getURLBase(This->href); + // strlcpy(localitem, This->baseurl, 1024); + } strlcat(localitem, tmpdir, 1024); } else { *************** *** 676,680 **** if (URLcmp(n->url, localitem) == 0) { if (DEBUG) ! printf("found a match, possible self reference steam\n"); break; } --- 696,700 ---- if (URLcmp(n->url, localitem) == 0) { if (DEBUG) ! printf("found a match, possible self reference stream\n"); break; } *************** *** 694,698 **** node->mmsstream = 1; } else { ! filename = getURLFilename(item); if (This->keep_download == 1 && filename != NULL) { snprintf(node->fname, sizeof(node->fname), "%s/%s", --- 714,718 ---- node->mmsstream = 1; } else { ! filename = getURLFilename(localitem); if (This->keep_download == 1 && filename != NULL) { snprintf(node->fname, sizeof(node->fname), "%s/%s", *************** *** 838,841 **** --- 858,863 ---- if (remainder < 1) break; + // seq tags are optional, but if we do have + // one see if it has a speed and if so, find it seqtag = memmem(p, remainder, "<seq", 4); if (seqtag != NULL) { *************** *** 856,865 **** speed); } else { speed = -1; } } else { seqtag = p; } ! // we have a speed now, lets fine the src videotag = memmem(seqtag, remainder, "<video", 6); while (videotag != NULL) { --- 878,891 ---- speed); } else { + // if we don't fine a speed, then set the speed to -1 speed = -1; } } else { + // if we didn't find a seqtag, then set seqtag equal to p + // so that the next block will work seqtag = p; } ! // we have a speed now, lets find all the src ! // files in the seq block videotag = memmem(seqtag, remainder, "<video", 6); while (videotag != NULL) { *************** *** 871,874 **** --- 897,902 ---- if (videosrc != NULL) { videosrc = strchr(videosrc, '\"'); + if (videosrc == NULL) + break; i = (long) videosrc - (long) buffer_lower; sscanf(buffer + i, "\"%1023[^\"]\"", url); *************** *** 877,880 **** --- 905,909 ---- parent->playlist = 1; addToList(instance, url, parent, speed); + found = 1; } videotag = *************** *** 917,920 **** --- 946,951 ---- if (p != NULL) { i = (long) p - (long) buffer_lower; + if (i >= size) + break; snprintf(url, 1024, "%s", buffer + i); } *************** *** 927,930 **** --- 958,963 ---- p = p + strlen(url) + 1; found = 1; + } else { + break; } } *************** *** 969,972 **** --- 1002,1050 ---- } + if (strncasecmp(buffer, "rtsp://", 7) == 0) { + p = buffer; + while (p != NULL) { + i = size - ((long) p - (long) buffer); + p = memmem(p, i, "rtsp://", 7); + if (p == NULL) { + break; + } else { + snprintf(url, 1024, "%s", p); + sub = strchr(url, 0xa); + if (sub != NULL) + sub[0] = '\0'; + if (DEBUG) + printf("URL: %s\n", url); + parent->playlist = 1; + addToList(instance, url, parent, -1); + p = p + strlen(url) + 1; + found = 1; + } + } + } + + if (strncasecmp(buffer, "http://", 7) == 0) { + p = buffer; + while (p != NULL) { + i = size - ((long) p - (long) buffer); + p = memmem(p, i, "http://", 7); + if (p == NULL) { + break; + } else { + snprintf(url, 1024, "%s", p); + sub = strchr(url, 0xa); + if (sub != NULL) + sub[0] = '\0'; + if (DEBUG) + printf("URL: %s\n", url); + parent->playlist = 1; + addToList(instance, url, parent, -1); + p = p + strlen(url) + 1; + found = 1; + } + } + } + + if (!found) break; *************** *** 1085,1088 **** --- 1163,1170 ---- long int filesize; int ready, notfound; + char *vo; + char vm[10]; + char *cf; + int cfpercent; local_td = (ThreadData *) td; *************** *** 1200,1215 **** if (!copy->mmsstream) { ! stat(copy->fname, &dload_stat); ! do { ! filesize = dload_stat.st_size; ! sleep(1); stat(copy->fname, &dload_stat); ! if (DEBUG) ! printf("sleeping size:%i\n", dload_stat.st_size); ! // if nothing has been downloaded then maybe the file is done and we should play ! if (filesize == dload_stat.st_size) ! break; } - while (dload_stat.st_size < (This->cachesize * 1024)); } --- 1282,1300 ---- if (!copy->mmsstream) { ! if ((copy->bytes < (This->cachesize * 1024)) && (copy->retrieved == 0)) { stat(copy->fname, &dload_stat); ! do { ! filesize = dload_stat.st_size; ! sleep(1); ! stat(copy->fname, &dload_stat); ! if (DEBUG) ! printf("sleeping size:%i\n", ! dload_stat.st_size); ! // if nothing has been downloaded then maybe the file is done and we should play ! if (filesize == dload_stat.st_size) ! break; ! } ! while (dload_stat.st_size < (This->cachesize * 1024)); } } *************** *** 1242,1248 **** } // Only update the display if there is something worth displaying ! if (strstr(eos, "Cache fill:") != NULL) DrawUI(This->netscape_widget, ! local_td->instance, eos, 0, -1); } if (strstr(buffer, "Starting") != NULL) { --- 1327,1338 ---- } // Only update the display if there is something worth displaying ! if (strstr(eos, "Cache fill:") != NULL) { ! cf = strstr(eos, "Cache fill:"); ! sscanf(cf, "Cache fill: %i", &cfpercent); ! strlcpy(message, "Caching ", sizeof(message)); ! strlcat(message, copy->url, sizeof(message)); DrawUI(This->netscape_widget, ! local_td->instance, eos, cfpercent, -1); ! } } if (strstr(buffer, "Starting") != NULL) { *************** *** 1255,1258 **** --- 1345,1354 ---- if (This->mode != NP_FULL) This->noredraw = 1; + vo = strstr(buffer, "VO:"); + sscanf(vo, "VO: [%10[^]]] %ix%i => %ix%i", vm, + &(local_list->actual_x), + &(local_list->actual_y), + &(local_list->play_x), + &(local_list->play_y)); } if (strstr(buffer, "Quit") != NULL) { Index: ui.c =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/ui.c,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** ui.c 22 Jan 2004 01:55:00 -0000 1.37 --- ui.c 26 Jan 2004 17:16:35 -0000 1.38 *************** *** 38,47 **** Cursor guicursor; XSetWindowAttributes attrs; ! XpmCreatePixmapFromData(dpy, d, logo_xpm, &logo, &logomask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_left_xpm, &progress_left, &progress_leftmask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_middle_xpm, &progress_middle, &progress_middlemask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_right_xpm, &progress_right, &progress_rightmask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_fill_xpm, &progress_fill, &progress_fillmask, NULL); font = XQueryFont(dpy, XGContextFromGC(gc)); guicursor = XCreateFontCursor(dpy, XC_watch); --- 38,51 ---- Cursor guicursor; XSetWindowAttributes attrs; ! XpmCreatePixmapFromData(dpy, d, logo_xpm, &logo, &logomask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_left_xpm, &progress_left, ! &progress_leftmask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_middle_xpm, &progress_middle, ! &progress_middlemask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_right_xpm, &progress_right, ! &progress_rightmask, NULL); ! XpmCreatePixmapFromData(dpy, d, progress_fill_xpm, &progress_fill, ! &progress_fillmask, NULL); font = XQueryFont(dpy, XGContextFromGC(gc)); guicursor = XCreateFontCursor(dpy, XC_watch); *************** *** 67,71 **** void DrawProgressBG(Display * dpy, Window w, int x, int y, int width, ! int height) { XGCValues values; --- 71,75 ---- void DrawProgressBG(Display * dpy, Window w, int x, int y, int width, ! int height) { XGCValues values; *************** *** 80,84 **** XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &values); ! XCopyArea(dpy, progress_left, (Drawable) w, border_gc, 0, 0, 10, 31, x - 10, y - 10); values.clip_mask = (int) NULL; XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, --- 84,89 ---- XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &values); ! XCopyArea(dpy, progress_left, (Drawable) w, border_gc, 0, 0, 10, 31, ! x - 10, y - 10); values.clip_mask = (int) NULL; XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, *************** *** 96,100 **** XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &values); ! XCopyArea(dpy, progress_right, (Drawable) w, border_gc, 0, 0, 10, 31, x + width, y - 10); values.clip_mask = (int) NULL; XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, --- 101,106 ---- XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, &values); ! XCopyArea(dpy, progress_right, (Drawable) w, border_gc, 0, 0, 10, 31, ! x + width, y - 10); values.clip_mask = (int) NULL; XChangeGC(dpy, border_gc, GCClipMask | GCClipXOrigin | GCClipYOrigin, *************** *** 111,115 **** XGCValues values; ! if (percent > 100) percent = 100; progress_gc = XCreateGC(dpy, w, GCForeground, &values); XSetTile(dpy, progress_gc, progress_fill); --- 117,122 ---- XGCValues values; ! if (percent > 100) ! percent = 100; progress_gc = XCreateGC(dpy, w, GCForeground, &values); XSetTile(dpy, progress_gc, progress_fill); *************** *** 117,122 **** XSetTSOrigin(dpy, progress_gc, x, y); pixelpercent = (width - x) * (percent / 100.); ! XFillRectangle(dpy, w, progress_gc, x, y, pixelpercent, ! height); XSetFillStyle(dpy, progress_gc, FillSolid); XFreeGC(dpy, progress_gc); --- 124,128 ---- XSetTSOrigin(dpy, progress_gc, x, y); pixelpercent = (width - x) * (percent / 100.); ! XFillRectangle(dpy, w, progress_gc, x, y, pixelpercent, height); XSetFillStyle(dpy, progress_gc, FillSolid); XFreeGC(dpy, progress_gc); *************** *** 185,189 **** XFillRectangle((Display *) This->display, This->window, white_gc, BORDER, LOGO_HEIGHT, This->width - BORDER * 2, ! This->height - font_height - LOGO_HEIGHT - BORDER - 10); } if (This->height > 80 && This->width > id_width + BORDER * 2) { --- 191,196 ---- XFillRectangle((Display *) This->display, This->window, white_gc, BORDER, LOGO_HEIGHT, This->width - BORDER * 2, ! This->height - font_height - LOGO_HEIGHT - BORDER - ! 10); } if (This->height > 80 && This->width > id_width + BORDER * 2) { *************** *** 195,205 **** This->width - id_width - BORDER, This->height - font_height, id, strlen(id)); ! } ! if ((FullRedraw || PercentRedraw) && This->width > id_width + BORDER * 3 + 100) // The height is set to 11 (my value for font_height) // since the progress image only has 11 pixels of space DrawProgressBG((Display *) This->display, This->window, BORDER, ! This->height - font_height - BORDER, ! This->width - id_width - BORDER * 3, 11); // Loop a max of 10 times in case of problems (like too small of a width) while (strlen(message) != 0 && loops < 10) { --- 202,213 ---- This->width - id_width - BORDER, This->height - font_height, id, strlen(id)); ! } ! if ((FullRedraw || PercentRedraw) ! && This->width > id_width + BORDER * 3 + 100) // The height is set to 11 (my value for font_height) // since the progress image only has 11 pixels of space DrawProgressBG((Display *) This->display, This->window, BORDER, ! This->height - font_height - BORDER, ! This->width - id_width - BORDER * 3, 11); // Loop a max of 10 times in case of problems (like too small of a width) while (strlen(message) != 0 && loops < 10) { *************** *** 226,232 **** DrawProgress((Display *) This->display, This->window, BORDER, This->height - font_height - BORDER, ! This->width - id_width - BORDER * 3, 11, ! percent); ! else if (FullRedraw && lastpercent != -1 && This->width > id_width + BORDER * 3 + 100) DrawProgress((Display *) This->display, This->window, BORDER, This->height - font_height - BORDER, --- 234,240 ---- DrawProgress((Display *) This->display, This->window, BORDER, This->height - font_height - BORDER, ! This->width - id_width - BORDER * 3, 11, percent); ! else if (FullRedraw && lastpercent != -1 ! && This->width > id_width + BORDER * 3 + 100) DrawProgress((Display *) This->display, This->window, BORDER, This->height - font_height - BORDER, *************** *** 252,263 **** font = NULL; // Free all the pixmaps used by the GUI ! if (progress_left) XFreePixmap(dpy, progress_left); ! if (progress_leftmask) XFreePixmap(dpy, progress_leftmask); ! if (progress_middle) XFreePixmap(dpy, progress_middle); ! if (progress_middlemask) XFreePixmap(dpy, progress_middlemask); ! if (progress_right) XFreePixmap(dpy, progress_right); ! if (progress_rightmask) XFreePixmap(dpy, progress_rightmask); ! if (progress_fill) XFreePixmap(dpy, progress_fill); ! if (progress_fillmask) XFreePixmap(dpy, progress_fillmask); // Don't free the font since we didn't create it } --- 260,279 ---- font = NULL; // Free all the pixmaps used by the GUI ! if (progress_left) ! XFreePixmap(dpy, progress_left); ! if (progress_leftmask) ! XFreePixmap(dpy, progress_leftmask); ! if (progress_middle) ! XFreePixmap(dpy, progress_middle); ! if (progress_middlemask) ! XFreePixmap(dpy, progress_middlemask); ! if (progress_right) ! XFreePixmap(dpy, progress_right); ! if (progress_rightmask) ! XFreePixmap(dpy, progress_rightmask); ! if (progress_fill) ! XFreePixmap(dpy, progress_fill); ! if (progress_fillmask) ! XFreePixmap(dpy, progress_fillmask); // Don't free the font since we didn't create it } |