diff options
Diffstat (limited to 'app/wlib/gtklib/tooltip.c')
| -rw-r--r-- | app/wlib/gtklib/tooltip.c | 31 | 
1 files changed, 17 insertions, 14 deletions
diff --git a/app/wlib/gtklib/tooltip.c b/app/wlib/gtklib/tooltip.c index 15b46d2..20a1ba9 100644 --- a/app/wlib/gtklib/tooltip.c +++ b/app/wlib/gtklib/tooltip.c @@ -45,7 +45,7 @@ static int enableBalloonHelp = TRUE;  static GtkWidget * balloonF; 	/**< balloon help control for hotbar item */
  static GtkWidget * balloonPI;
 -static const char * balloonMsg = NULL;
 +static char balloonMsg[100] = "";
  static wControl_p balloonB;
  static wPos_t balloonDx, balloonDy;
  static wBool_t balloonVisible = FALSE;
 @@ -136,54 +136,56 @@ void wControlSetBalloon( wControl_p b, wPos_t dx, wPos_t dy, const char * msg )      wPos_t w, h;
      wPos_t xx, yy;
      const char * msgConverted;
 -    GtkAllocation size;
 +    GtkRequisition size;
      /* return if there is nothing to do */
      if (balloonVisible && balloonB == b &&
 -            balloonDx == dx && balloonDy == dy && msg != NULL && balloonMsg != NULL)
 +            balloonDx == dx && balloonDy == dy && msg != NULL && !balloonMsg[0])
             if (strcmp(msg,balloonMsg)==0)
        		return;
      /* hide the tooltip */
      if ( msg == NULL ) {
 -        if ( balloonF != NULL ) {
 +        if ( balloonF != NULL && balloonVisible) {
              gtk_widget_hide( balloonF );
              balloonVisible = FALSE;
          }
 -        balloonMsg = "";
 +        balloonMsg[0] = '\0';
          return;
      }
      msgConverted = wlibConvertInput(msg);
      if ( balloonF == NULL ) {
 -		GtkWidget *alignment;
 +		//GtkWidget *alignment;
 -        balloonF = gtk_window_new( GTK_WINDOW_TOPLEVEL );
 +        balloonF = gtk_window_new( GTK_WINDOW_POPUP );
          gtk_window_set_type_hint( GTK_WINDOW( balloonF), GDK_WINDOW_TYPE_HINT_TOOLTIP );
          gtk_window_set_decorated (GTK_WINDOW (balloonF), FALSE );
          gtk_window_set_resizable( GTK_WINDOW (balloonF), FALSE );
 +        gtk_window_set_accept_focus(GTK_WINDOW( balloonF), FALSE);
 -		alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
 +		GtkWidget * alignment = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
  		gtk_alignment_set_padding( GTK_ALIGNMENT(alignment), 6, 6, 6, 6 );
 -		
 +
  		gtk_container_add (GTK_CONTAINER (balloonF), alignment);
 +		
  		gtk_widget_show (alignment);
          balloonPI = gtk_label_new(msgConverted);
          gtk_container_add( GTK_CONTAINER(alignment), balloonPI );
 -        gtk_widget_show( balloonPI );
 +        gtk_widget_show_all( balloonPI );
      }
      gtk_label_set_text( GTK_LABEL(balloonPI), msgConverted );
      balloonDx = dx;
      balloonDy = dy;
      balloonB = b;
 -    balloonMsg = msg;
 -    gtk_widget_get_allocation(balloonPI, &size );
 +    snprintf(balloonMsg, sizeof(balloonMsg), "%s", msg);
 +    gtk_widget_get_requisition(balloonPI, &size );
      w = size.width;
      h = size.height;
 -    gdk_window_get_origin( gtk_widget_get_window( GTK_WIDGET(b->parent->gtkwin)), &x, &y );
 +    gtk_window_get_position( GTK_WINDOW(b->parent->gtkwin), &x, &y);
      x += b->realX + dx;
      y += b->realY + b->h - dy;
 @@ -200,7 +202,8 @@ void wControlSetBalloon( wControl_p b, wPos_t dx, wPos_t dy, const char * msg )          y = yy - h ;
      }
      gtk_window_move( GTK_WINDOW( balloonF ), x, y );
 -    gtk_widget_show( balloonF );
 +    gtk_widget_show_all( balloonF );
 +    gtk_widget_show( balloonPI );
      balloonVisible = TRUE;
  }
  | 
