static int GCol_OK(GGadget *g, GEvent *e) { if ( e->type==et_controlevent && e->u.control.subtype == et_buttonactivate ) { struct gcol_data *d = GDrawGetUserData(GGadgetGetWindow(g)); double *offs[7] = { &d->col.h, &d->col.s, &d->col.v, &d->col.r, &d->col.g, &d->col.b, &d->col.alpha }; int err = false, i; double val; for ( i=0; i<7; ++i ) { val = GetReal8(d->gw,cids[i],_(labnames[i]),&err); if ( err ) return( true ); if ( i==0 ) { val = fmod(val,360); if ( val<0 ) val += 360; } else { if ( val<0 || val>1 ) { gwwv_post_error(_("Value out of bounds"), _("Saturation and Value, and the three colors must be between 0 and 1")); return( true ); } } *offs[i] = val; } d->done = true; } return( true ); }
static void do_windows_browser(char *fullspec) { char *format, *start, *pt, ch, *temp, *cmd; format = win_program_from_extension(".html"); if ( format==NULL ) format = win_program_from_extension(".htm"); if ( format==NULL ) { gwwv_post_error(_("No Browser"),_("Could not find a browser. Set the BROWSER environment variable to point to one")); return; } if ( format[0]=='"' || format[0]=='\'' ) { start = format+1; pt = strchr(start,format[0]); } else { start = format; pt = strchr(start,' '); } if ( pt==NULL ) pt = start+strlen(start); ch = *pt; *pt='\0'; temp = galloc(strlen(start)+300+ (ch==0?0:strlen(pt+1))); cygwin_conv_to_full_posix_path(start,temp+1); temp[0]='"'; strcat(temp,"\" "); if ( ch!='\0' ) strcat(temp,pt+1); cmd = galloc(strlen(temp)+strlen(fullspec)+8); if ( strstr("%s",temp)!=NULL ) sprintf( cmd, temp, fullspec ); else { strcpy(cmd,temp); strcat(cmd, " "); strcat(cmd,fullspec); } strcat(cmd," &" ); system(cmd); free( cmd ); free( temp ); free( format ); }
void help(char *file) { char fullspec[1024], *temp, *pt; if ( browser[0]=='\0' ) findbrowser(); #ifndef __CygWin if ( browser[0]=='\0' ) { gwwv_post_error(_("No Browser"),_("Could not find a browser. Set the BROWSER environment variable to point to one")); return; } #endif if ( strstr(file,"http://")==NULL ) { fullspec[0] = 0; if ( ! GFileIsAbsolute(file) ) { if ( helpdir==NULL || *helpdir=='\0' ) { #ifdef DOCDIR strcpy(fullspec,DOCDIR "/"); #elif defined(SHAREDIR) strcpy(fullspec,SHAREDIR "/doc/fontforge/"); #else strcpy(fullspec,"/usr/local/share/doc/fontforge/"); #endif } else { strcpy(fullspec,helpdir); } } strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; if ( !GFileReadable( fullspec )) { if ( *file!='/' ) { strcpy(fullspec,"/usr/share/doc/fontforge/"); strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; } } if ( !GFileReadable( fullspec )) { strcpy(fullspec,"http://fontforge.sf.net/"); AppendSupportedLocale(fullspec); strcat(fullspec,file); } else if ( pt!=NULL ) *pt = '#'; } else strcpy(fullspec,file); #if __CygWin if ( (strstrmatch(browser,"/cygdrive")!=NULL || browser[0]=='\0') && strstr(fullspec,":/")==NULL ) { /* It looks as though the browser is a windows application, so we */ /* should give it a windows file name */ char *pt, *tpt; temp = galloc(1024); cygwin_conv_to_full_win32_path(fullspec,temp); for ( pt = fullspec, tpt = temp; *tpt && pt<fullspec+sizeof(fullspec)-3; *pt++ = *tpt++ ) if ( *tpt=='\\' ) *pt++ = '\\'; *pt = '\0'; free(temp); } #endif #if __Mac if ( strcmp(browser,"open")==0 ) /* open doesn't want "file:" prepended */; else #endif if ( strstr(fullspec,":/")==NULL ) { char *t1 = galloc(strlen(fullspec)+strlen("file:")+20); #if __CygWin sprintf( t1, "file:\\\\\\%s", fullspec ); #else sprintf( t1, "file:%s", fullspec); #endif strcpy(fullspec,t1); free(t1); } #if 0 && __Mac /* Starting a Mac application is weird... system() can't do it */ /* Thanks to Edward H. Trager giving me an example... */ if ( strstr(browser,".app")!=NULL ) { *strstr(browser,".app") = '\0'; pt = strrchr(browser,'/'); if ( pt==NULL ) pt = browser-1; ++pt; temp = galloc(strlen(pt)+strlen(fullspec) + strlen( "osascript -l AppleScript -e \"Tell application \"\" to getURL \"\"\"" )+ 20); /* this doesn't work on Max OS X.0 (osascript does not support -e) */ sprintf( temp, "osascript -l AppleScript -e \"Tell application \"%s\" to getURL \"%s\"\"", pt, fullspec); system(temp); ff_post_notice(_("Leave X"),_("A browser is probably running in the native Mac windowing system. You must leave the X environment to view it. Try Cmd-Opt-A")); } else { #elif __Mac /* This seems a bit easier... Thanks to riggle */ if ( strcmp(browser,"open")==0 ) { char *str = "DYLD_LIBRARY_PATH=\"\"; open "; temp = galloc(strlen(str) + strlen(fullspec) + 20); sprintf( temp, "%s \"%s\" &", str, fullspec ); system(temp); } else { #elif __CygWin if ( browser[0]=='\0' ) { do_windows_browser(fullspec); temp = NULL; } else { #else { #endif temp = galloc(strlen(browser) + strlen(fullspec) + 20); sprintf( temp, strcmp(browser,"kfmclient openURL")==0 ? "%s \"%s\" &" : "\"%s\" \"%s\" &", browser, fullspec ); system(temp); } free(temp); } #endif static void UI_IError(const char *format,...) { va_list ap; char buffer[300]; va_start(ap,format); vsnprintf(buffer,sizeof(buffer),format,ap); GDrawIError("%s",buffer); va_end(ap); } #define MAX_ERR_LINES 400 static struct errordata { char *errlines[MAX_ERR_LINES]; GFont *font; int fh, as; GGadget *vsb; GWindow gw, v; int cnt, linecnt; int offtop; int showing; int start_l, start_c, end_l, end_c; int down; } errdata; static void ErrHide(void) { GDrawSetVisible(errdata.gw,false); errdata.showing = false; } static void ErrScroll(struct sbevent *sb) { int newpos = errdata.offtop; switch( sb->type ) { case et_sb_top: newpos = 0; break; case et_sb_uppage: newpos -= errdata.linecnt; break; case et_sb_up: --newpos; break; case et_sb_down: ++newpos; break; case et_sb_downpage: newpos += errdata.linecnt; break; case et_sb_bottom: newpos = errdata.cnt-errdata.linecnt; break; case et_sb_thumb: case et_sb_thumbrelease: newpos = sb->pos; break; } if ( newpos>errdata.cnt-errdata.linecnt ) newpos = errdata.cnt-errdata.linecnt; if ( newpos<0 ) newpos =0; if ( newpos!=errdata.offtop ) { errdata.offtop = newpos; GScrollBarSetPos(errdata.vsb,errdata.offtop); GDrawRequestExpose(errdata.v,NULL,false); } }
FontViewBase* collabclient_sessionJoin( void* ccvp, FontView *fv ) { FontViewBase* ret = 0; #ifdef BUILD_COLLAB cloneclient_t* cc = (cloneclient_t*)ccvp; printf("collabclient_sessionJoin(top)\n"); // Get state snapshot cc->sequence = 0; zstr_sendm (cc->snapshot, "ICANHAZ?"); zstr_send (cc->snapshot, SUBTREE); // if we wait for timeoutMS millisec then we assume failure // timeWaitedMS is used to keep track of how long we have waited kvmsg_t* lastSFD = 0; int timeWaitedMS = 0; int timeoutMS = pref_collab_sessionJoinTimeoutMS; while (true) { printf("timeoutMS:%d timeWaitedMS:%d\n", timeoutMS, timeWaitedMS ); if( timeWaitedMS >= timeoutMS ) { char* addrport = collabclient_makeAddressString( cc->address, cc->port ); gwwv_post_error(_("FontForge Collaboration"), _("Failed to connect to server session at %s"), addrport ); return 0; } kvmsg_t *kvmsg = kvmsg_recv_full( cc->snapshot, ZMQ_DONTWAIT ); if (!kvmsg) { int msToWait = 50; g_usleep( msToWait * 1000 ); timeWaitedMS += msToWait; continue; } /* kvmsg_t *kvmsg = kvmsg_recv (cc->snapshot); */ /* if (!kvmsg) */ /* break; // Interrupted */ if (streq (kvmsg_key (kvmsg), "KTHXBAI")) { cc->sequence = kvmsg_sequence (kvmsg); printf ("I: received snapshot=%d\n", (int) cc->sequence); kvmsg_destroy (&kvmsg); // Done break; } printf ("I: storing seq=%ld ", kvmsg_sequence (kvmsg)); if( kvmsg_get_prop (kvmsg, "type") ) printf(" type:%s", kvmsg_get_prop (kvmsg, "type") ); printf ("\n"); if( !strcmp(kvmsg_get_prop (kvmsg, "type"), MSG_TYPE_SFD )) { if( !lastSFD || kvmsg_sequence (kvmsg) > kvmsg_sequence (lastSFD)) { lastSFD = kvmsg; } size_t data_size = kvmsg_size(lastSFD); printf("data_size:%ld\n", data_size ); } kvmsg_store (&kvmsg, cc->kvmap); } printf("collabclient_sessionJoin(done with netio getting snapshot)\n"); printf("collabclient_sessionJoin() lastSFD:%p\n", lastSFD ); // int rc = 0; // void* out = 0; // rc = zhash_foreach ( cc->kvmap, collabclient_sessionJoin_findSFD_foreach_fn, &out ); // printf("collabclient_sessionJoin() last sfd:%p\n", out ); if( !lastSFD ) { gwwv_post_error(_("FontForge Collaboration"), _("No Font Snapshot received from the server")); return 0; } if( lastSFD ) { int openflags = 0; char filename[PATH_MAX]; snprintf(filename, PATH_MAX, "%s/fontforge-collab-import-%d.sfd",getTempDir(),getpid()); GFileWriteAll( filename, kvmsg_body (lastSFD) ); /* * Since we are creating a new fontview window for the collab session * we "hand over" the collabClient from the current fontview used to join * the session to the fontview which owns the sfd from the wire. */ FontViewBase* newfv = ViewPostScriptFont( filename, openflags ); newfv->collabClient = cc; fv->b.collabClient = 0; newfv->collabState = cs_client; FVTitleUpdate( newfv ); collabclient_notifySessionJoining( cc, newfv ); ret = newfv; /* cloneclient_t* newc = collabclient_new( cc->address, cc->port ); */ /* collabclient_sessionJoin( newc, fv ); */ } printf("applying updates from server that were performed after the SFD snapshot was done...\n"); kvmap_visit( cc->kvmap, kvmsg_sequence (lastSFD), collabclient_sessionJoin_processmsg_foreach_fn, cc ); /* struct collabclient_sessionJoin_processUpdates_foreach_args args; */ /* args.cc = cc; */ /* args.lastSFD = lastSFD; */ /* rc = zhash_foreach ( cc->kvmap, collabclient_sessionJoin_processUpdates_foreach_fn, &args ); */ printf("collabclient_sessionJoin(complete)\n"); #endif return ret; }
void help(char *file) { char fullspec[1024], *temp, *pt; if ( browser[0]=='\0' ) findbrowser(); #ifndef __CygWin if ( browser[0]=='\0' ) { gwwv_post_error(_("No Browser"),_("Could not find a browser. Set the BROWSER environment variable to point to one")); return; } #endif if ( strstr(file,"http://")==NULL ) { fullspec[0] = 0; if ( *file!='/' ) { if ( helpdir==NULL || *helpdir=='\0' ) { #ifdef DOCDIR strcpy(fullspec,DOCDIR "/"); #elif defined(SHAREDIR) strcpy(fullspec,SHAREDIR "/doc/fontforge/"); #else strcpy(fullspec,"/usr/local/share/doc/fontforge/"); #endif } else strcpy(fullspec,helpdir); } strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; if ( !GFileReadable( fullspec )) { if ( *file!='/' ) { strcpy(fullspec,"/usr/share/doc/fontforge/"); strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; } } if ( !GFileReadable( fullspec )) { strcpy(fullspec,"http://fontforge.sf.net/"); AppendSupportedLocale(fullspec); strcat(fullspec,file); } else if ( pt!=NULL ) *pt = '#'; } else strcpy(fullspec,file); #if __CygWin if ( (strstrmatch(browser,"/cygdrive")!=NULL || browser[0]=='\0') && strstr(fullspec,":/")==NULL ) { /* It looks as though the browser is a windows application, so we */ /* should give it a windows file name */ char *pt, *tpt; temp = galloc(1024); cygwin_conv_to_full_win32_path(fullspec,temp); for ( pt = fullspec, tpt = temp; *tpt && pt<fullspec+sizeof(fullspec)-3; *pt++ = *tpt++ ) if ( *tpt=='\\' ) *pt++ = '\\'; *pt = '\0'; free(temp); } #endif #if __Mac if ( strcmp(browser,"open")==0 ) /* open doesn't want "file:" prepended */; else #endif if ( strstr(fullspec,":/")==NULL ) { char *t1 = galloc(strlen(fullspec)+strlen("file:")+20); #if __CygWin sprintf( t1, "file:\\\\\\%s", fullspec ); #else sprintf( t1, "file:%s", fullspec); #endif strcpy(fullspec,t1); free(t1); } #if 0 && __Mac /* Starting a Mac application is weird... system() can't do it */ /* Thanks to Edward H. Trager giving me an example... */ if ( strstr(browser,".app")!=NULL ) { *strstr(browser,".app") = '\0'; pt = strrchr(browser,'/'); if ( pt==NULL ) pt = browser-1; ++pt; temp = galloc(strlen(pt)+strlen(fullspec) + strlen( "osascript -l AppleScript -e \"Tell application \"\" to getURL \"\"\"" )+ 20); /* this doesn't work on Max OS X.0 (osascript does not support -e) */ sprintf( temp, "osascript -l AppleScript -e \"Tell application \"%s\" to getURL \"%s\"\"", pt, fullspec); system(temp); ff_post_notice(_("Leave X"),_("A browser is probably running in the native Mac windowing system. You must leave the X environment to view it. Try Cmd-Opt-A")); } else { #elif __Mac /* This seems a bit easier... Thanks to riggle */ if ( strcmp(browser,"open")==0 ) { temp = galloc(strlen(browser) + strlen(fullspec) + 20); sprintf( temp, "open \"%s\" &", fullspec ); system(temp); ff_post_notice(_("Leave X"),_("A browser is probably running in the native Mac windowing system. You must leave the X environment to view it. Try Cmd-Opt-A")); } else { #elif __CygWin if ( browser[0]=='\0' ) { do_windows_browser(fullspec); temp = NULL; } else { #else { #endif temp = galloc(strlen(browser) + strlen(fullspec) + 20); sprintf( temp, strcmp(browser,"kfmclient openURL")==0 ? "%s \"%s\" &" : "\"%s\" \"%s\" &", browser, fullspec ); system(temp); } free(temp); } #define MAX_ERR_LINES 200 static struct errordata { char *errlines[MAX_ERR_LINES]; int fh, as; GtkWidget *vsb; GtkWidget *gw, *v; PangoLayout *layout; int cnt, linecnt; int offtop; int showing; } errdata; static void Warning_Hide(void) { gdk_window_hide(errdata.gw->window); errdata.showing = false; } static void Warning_VScroll(GtkRange *vsb, gpointer user_data) { GtkAdjustment *sb; sb = gtk_range_get_adjustment(GTK_RANGE(vsb)); if ( sb->value!=errdata.offtop) { int diff = sb->value-errdata.offtop; errdata.offtop = sb->value; gdk_window_scroll(GDK_WINDOW(errdata.v->window),0,diff*errdata.fh); } } static gboolean Warning_Resize(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GtkAdjustment *sb; errdata.linecnt = widget->allocation.width/errdata.fh; sb = gtk_range_get_adjustment(GTK_RANGE(errdata.vsb)); sb->lower = 0; sb->upper = errdata.cnt; sb->page_size = errdata.linecnt; sb->step_increment = 1; sb->page_increment = errdata.linecnt; if ( errdata.offtop>=errdata.cnt-errdata.linecnt ) errdata.offtop = errdata.cnt-errdata.linecnt; if ( errdata.offtop<0 ) errdata.offtop =0; sb->value = errdata.offtop; gtk_range_set_adjustment(GTK_RANGE(errdata.vsb),sb); return 0; }
void help(char *file) { char fullspec[PATH_MAX], *temp, *pt; if ( browser[0]=='\0' ) findbrowser(); if ( browser[0]=='\0' ) { gwwv_post_error(_("No Browser"),_("Could not find a browser. Set the BROWSER environment variable to point to one")); return; } if ( strstr(file,"http://")==NULL ) { memset(fullspec,0,sizeof(fullspec)); if ( ! GFileIsAbsolute(file) ) snprintf(fullspec, PATH_MAX, "%s", getHelpDir()); strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; if ( !GFileReadable( fullspec )) { if ( *file!='/' ) { strcpy(fullspec,"/usr/share/doc/fontforge/"); strcat(fullspec,file); if (( pt = strrchr(fullspec,'#') )!=NULL ) *pt ='\0'; } } if ( !GFileReadable( fullspec )) { strcpy(fullspec,"http://fontforge.sf.net/"); AppendSupportedLocale(fullspec); strcat(fullspec,file); } else if ( pt!=NULL ) *pt = '#'; } else strncpy(fullspec,file,sizeof(fullspec)); #if __Mac if ( strcmp(browser,"open")==0 ) /* open doesn't want "file:" prepended */; else #endif if ( strstr(fullspec,":/")==NULL ) { if ( (temp=malloc(strlen(fullspec)+strlen("file:")+20))==NULL ) return; sprintf(temp,"file:%s",fullspec); strncpy(fullspec,temp,sizeof(fullspec)); fullspec[sizeof(fullspec)-1] = '\0'; free(temp); } #if __Mac /* This seems a bit easier... Thanks to riggle */ if ( strcmp(browser,"open")==0 ) { char *str = "DYLD_LIBRARY_PATH=\"\"; open "; if ( (temp=malloc(strlen(str) + strlen(fullspec) + 20))==NULL ) return; sprintf( temp, "%s \"%s\" &", str, fullspec ); system(temp); free(temp); } else { #else { #endif if ( (temp=malloc(strlen(browser) + strlen(fullspec) + 20))==NULL ) return; sprintf( temp, strcmp(browser,"kfmclient openURL")==0 ? "%s \"%s\" &" : "\"%s\" \"%s\" &", browser, fullspec ); system(temp); free(temp); } } #endif static void UI_IError(const char *format,...) { va_list ap; char buffer[300]; va_start(ap,format); vsnprintf(buffer,sizeof(buffer),format,ap); GDrawIError("%s",buffer); va_end(ap); }